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;
これは良い習慣とは見なされませんが、誤って間違った列を選択したり、間違った順序になっている可能性があるためです。