エラーメッセージ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列に明示的な値を挿入する方法を参照してください。