INSERTに十分な列を指定しないと、SQLServerエラー120が発生します。 SELECTを使用する場合のリスト 挿入する値のリスト。
具体的には、SELECTを使用すると発生します INSERTのリスト ステートメントですが、SELECT リストは、INSERTで指定した数の列を返しません 。
これは簡単に修正できます。 INSERT間で列数が一致していることを確認してください およびSELECT リスト。
不正なコード
このエラーの原因となるコードの例を次に示します。
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch; 結果:
Msg 120, Level 15, State 1, Line 1 The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.
この場合、INSERTで3つの列を指定します 、ただし、SELECTで2つの列のみを選択します リスト。
良いコード
上記のエラーを修正する方法は次のとおりです。
INSERT INTO OrdersLatest (
OrderId,
OrderDate,
OrderDesc
)
SELECT
OrderId,
OrderDate,
OrderDesc
FROM OrdersMarch; 結果:
(5 rows affected)
OrderDescを追加するだけでした SELECTへの列 リスト。
より少ない列の指定
前の例は明らかに、余分な列を挿入したいと想定しています。その列を挿入したくない場合は、INSERTから削除する必要があります。 完全に。
このように。
INSERT INTO OrdersLatest (
OrderId,
OrderDate
)
SELECT
OrderId,
OrderDate
FROM OrdersMarch;
ただし、これはNOT NULLがあるかどうかによって異なります。 宛先テーブルの制約。
SELECTリストでのワイルドカードの使用
アスタリスク(*)を使用することもできます )SELECTのワイルドカード リスト。
INSERT INTO OrdersLatest (
OrderDate,
OrderId,
OrderDesc
)
SELECT *
FROM OrdersMarch; これは良い習慣とは見なされませんが、誤って間違った列を選択したり、間違った順序になっている可能性があるためです。