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

SQL Serverエラー110:INSERTステートメントには、VALUES句で指定された値よりも少ない列があります。

    エラーメッセージ110は、SQLServerでデータをテーブルに挿入するときによく発生するエラーです。完全なエラーは次のようになります:

    Msg 110, Level 15, State 1, Line 1
    There are fewer columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.

    これは、INSERTで指定する列が少ない場合に発生します VALUESで挿入しようとしている値の数よりもステートメント 句。

    これは、INSERTから誤って1つ以上の列を省略した場合に発生します。 ステートメント。

    反対のことを行おうとすると、同様の(ただし技術的には異なる)エラーが発生します。詳細を指定してください INSERTの列 あなたが挿入しようとするよりもステートメント。

    実例を示します。

    INSERT INTO Customers (FirstName) 
    VALUES ('Bob', 'Brown');

    結果:

    Msg 110, Level 15, State 1, Line 1
    There are fewer columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.

    この場合、データを挿入する列を1つ指定します(FirstName )、ただし、挿入する2つの値を指定します(Bob およびBrown

    エラーを修正する方法

    列の数が挿入される値の数と一致することを確認することで、このエラーを修正できます。

    私の例では、挿入する値の1つを削除するか、2番目の値に対応するために2番目の列を追加することができます。

    だから私はこれを行うことができました:

    INSERT INTO Customers (FirstName) 
    VALUES ('Bob');

    またはこれ:

    INSERT INTO Customers (FirstName, LastName) 
    VALUES ('Bob', 'Brown');

    の場合は言及する価値があります 列にNOT NULLがあります 制約、最初の例はその制約に違反します(NULLを挿入しようとしているため) に 実際にNOT NULLがある場合の列 その列の制約)。

    テーブルに列が2つしかない場合は、次のようにすることもできます。

    INSERT INTO Customers
    VALUES ('Bob', 'Brown');

    通常は、可能であれば列名を明示的に指定することをお勧めします(前の例のように)。


    1. テーブルを変更して列のデフォルト値を変更する

    2. sqlalchemyで警告をオフにします

    3. 一般的なテーブル式:それらをいつどのように使用するか

    4. mysqlピボット/クロス集計クエリ