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

SQL Serverエラー213:列名または指定された値の数がテーブル定義と一致しません。

    エラーメッセージ213は、列名を明示的に指定せずにテーブルに値を挿入しようとしたときに発生する一般的なエラーです。

    エラーは次のようになります:

    Msg 213, Level 16, State 1, Line 1
    Column name or number of supplied values does not match table definition.

    これは、そのテーブルに間違った数の値を指定した場合に発生します。つまり、指定する値の数がテーブルの列の数と一致しません。

    実例を示します。

    INSERT INTO Customers
    VALUES ('Jake');

    結果:

    Msg 213, Level 16, State 1, Line 1
    Column name or number of supplied values does not match table definition.

    私の場合、問題はテーブルに実際に3つの列が含まれていることです。私のテーブル定義は次のようになります:

    CREATE TABLE Customers (
    CustomerId int IDENTITY(1,1) NOT NULL,
    FirstName nvarchar(255),
    LastName nvarchar(255)
    );

    値を挿入しようとしていますが、SQL Serverはどの列に入力する必要があるかわからないため、エラーが発生します。

    あまりにも多くの値を挿入しようとすると、同じエラーが発生します。たとえば、次の場合も同じエラーが発生します。

    INSERT INTO Customers
    VALUES ('Jake', 'Smith', 'New York', 'USA');

    結果:

    Msg 213, Level 16, State 1, Line 1
    Column name or number of supplied values does not match table definition.

    エラーを修正する方法

    これを修正する1つの方法は、挿入しようとする値の数が実際にテーブルの列の数と一致することを確認することです。

    これを行うためのより良い方法は、INSERTで列名を明示的に指定することです。 声明。これを行うと、誤って間違った列にデータを挿入することがなくなります。

    したがって、挿入する値に応じて、例を次のように書き直すことができます。

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

    またはこれ:

    INSERT INTO Customers (FirstName, LastName)
    VALUES ('Jake', 'Smith');

    暗黙の列名

    前述のように、INSERTの各列名を明示的に記述することをお勧めします ステートメント(前の例で行ったように)

    ただし、次のように、暗黙の列名を使用するように例を変更することはできます。

    INSERT INTO Customers
    VALUES (1, 'Jake', 'Smith');

    ただし、これにより、ID列に関して別の問題が発生する可能性があります。これを行う必要がある場合は、ID列に明示的な値を挿入する方法を参照してください。


    1. LinuxでのPostgreSQLデータベースのデフォルトの場所

    2. Linuxのカスタムキーストアで保護されたデータの使用

    3. Oracleのsidとデータベース名を確認しています

    4. Heroku Postgresエラー:PGError:エラー:リレーション組織が存在しません(ActiveRecord ::StatementInvalid)