2010-11-22 61 views
2

這裏是我的腳本:SQL服務器:希望將數據插入一列,其餘空:不是讓我

INSERT INTO 
AP09 
SELECT 
    cds AS CDSCODE 
FROM 
    P_Schools 
WHERE 
    active = 1; 

中有AP09表十列。除主鍵外(CDSCODE)都可以爲空。我只想插入另一個表中的CDSCODE,其餘的默認值爲null。相反,我得到一個錯誤:

SQL Server Database Error: Insert Error: Column name or number of supplied values does not match table definition. 

如果我提供正確數量的空值,插入工作。但微軟文檔說(對於INSERT命令):

The Database Engine automatically provides a value for the column if the column: 

--Has an IDENTITY property. The next incremental identity value is used. 
--Has a default. The default value for the column is used. 
--Has a timestamp data type. The current timestamp value is used. 
--Is nullable. A null value is used. 
--Is a computed column. The calculated value is used. 

任何人都知道爲什麼這似乎不工作爲廣告?這花了我很多時間,因爲我必須爲很多表格做這個工作! (它是SQL Server 2005順便說一句)

回答

7

由於該表AP09CDSCODE不具有相同的列數......你需要指定的cols插入。嘗試這樣的 -

INSERT INTO 
AP09 (Col1) 

SELECT 
    cds AS CDSCODE 
FROM 
    P_Schools 
WHERE 
    active = 1; 
+0

謝謝,就是這樣(我喜歡簡單的答案!)我假定通過在SELECT語句(cds AS CDSCODE)中給出AP09列名稱,它可以算出它。 (我主要是程序員,而不是SQL Server的人)再次感謝! – Cynthia 2010-11-22 17:37:23

0

提供一個列表列表insert

insert into foo (col1) select ...

+0

哈!擊敗我:) – Kell 2010-11-22 17:30:05

0

你指定你的選擇列表中的一列,沒有指定哪個表中的十列的是被加載到。 SQL不知道,並且不會假定它可以找出表中哪一列加載它 - 你必須指定插入哪一列。 (如果你提供了需要插入的列數,它只會「假設」。)

SQL猜測和錯誤會比僅僅說「呃,我不知道」要糟糕得多。是的,這似乎是一個簡單的選擇,但是他們必須編寫適用於所有可能情況的算法,這是不可能的。

0
INSERT INTO 
AP09 (YourTargetColumnName) 
SELECT 
    cds AS CDSCODE 
FROM 
    P_Schools 
WHERE 
    active = 1; 
+0

如果您發佈代碼或XML,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010)以更好地格式化和語法突出顯示它! – 2010-11-22 19:56:48

0

行爲和文檔是正確的。

執行insert into foo select att1, att2...時,您需要在select語句中提供確切的列數。

的「自動提供一個值...爲空列」是關於insert語句下面的類型,其中被插入被明確列出的值的列中的Microsoft文檔的聲明:在

INSERT INTO Cities (Location) 
VALUES ('Chicago'); 

上面的語句,如果有9個其他列接受null,它們將被隱式地填充爲null。哈哈!

+0

如果您發佈代碼或XML,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010)以精確地格式化和語法突出顯示它! – 2010-11-22 19:57:32