sql >> データベース >  >> RDS >> Sqlserver

修正方法「INSERTステートメントの選択リストには、挿入リストよりも少ない項目が含まれています」

    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;

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


    1. SCDタイプ6

    2. JSON_EXTRACT()–MySQLのJSONドキュメントからデータを返す

    3. MariaDBで先行ゼロで数値を埋める方法

    4. Postgres配列へのデータの選択