2010-11-22 8 views
2

をさせないことは、ここに私のスクリプトです:SQL Serverの:1列、残りヌルにデータを挿入したい:私

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

10列がAP09テーブルにあります。主キー以外のすべて(CDSCODE)はNULL可能です。私はちょうど別のテーブルからCDSCODEを挿入し、残りはデフォルトでnullにします。代わりにエラーが発生します。

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

正しい番号のヌルを指定すると、挿入が機能します。しかし、Microsoftのドキュメントには、(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. 

誰もが、宣伝されているように動作していないようです。これは私が多くのテーブルのためにこれをしなければならないので、私に多くの時間を要しています! (It's SQL Server 2005 BTW)

答えて

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

0

insertに列リストを提供します。

insert into foo (col1) select ...

+0

ha!私にそれを打つ:) – Kell

0

あなたはそれがにロードされる表における10列のどの指定せずに、あなたの選択リストに1列を指定しました。 SQLはわかりませんし、がテーブルのどの列を読み込むのか分かりません。挿入する列を指定する必要があります。 (挿入する数の列を指定するだけであれば "仮定"している)。

SQLが推測して間違っているということは、「ちょっと、わかりません」というよりはるかに悪いことです。はい、ここは簡単な選択ですが、あらゆる可能な状況で機能するアルゴリズムを記述する必要がありますが、それは不可能です。

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

あなたがコードやXMLを投稿する場合は、**テキストエディタでそれらの行を強調表示し、きれいにフォーマットして構文を強調表示するには、エディタツールバーの "コード"ボタン(101 010)をクリックしてください! –

0

動作と説明書は正しいです。

insert into foo select att1, att2...を実行する場合は、select文で正確な列数を指定する必要があります。 「自動的にNULL可能列に対して...価値を提供する」の

Microsoftのドキュメントの文では、挿入される値の列が明示的にリストされている以下のINSERT文の種類に関するされています

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

で上記のステートメントで、ヌルを受け入れる他の9つの列がある場合、それらは暗黙的にヌルで取り込まれます。

+0

コードやXMLを投稿する場合は、テキストエディタでこれらの行を強調表示し、エディタツールバーの[コード]ボタン(101 010)をクリックして、フォーマットや構文を強調表示してください! –