SQL Serverエラーメッセージ206、レベル16は、データをテーブルに挿入するときに発生する一般的なエラーです。
これは、挿入しようとしているデータ型と互換性のない列にデータを挿入しようとしているときに発生します。
これは、誤って間違った列(または間違ったテーブル)にデータを挿入しようとした場合に発生する可能性があります。ただし、SQLServerがデータを変換すると誤って想定した場合にも発生する可能性があります。
この問題を修正するには、正しいデータ型を挿入していることを確認してください。
問題コードの例
このエラーが発生するコードの例を次に示します。
INSERT INTO Orders(OrderId, OrderDate, OrderDesc)
VALUES ('2020-04-02', 1, 'Dog food');
結果:
Msg 206, Level 16, State 2, Line 1 Operand type clash: int is incompatible with date
この場合、挿入しようとしている列名と値を確認するだけで、どこが間違っているのかがはっきりとわかります。
間違った順序で値を挿入しようとしています。
問題は、日付列に整数を挿入しようとしていることです。具体的には、値1
を挿入しようとしています OrderDate
という列に 。
もちろん、問題の原因は列名ではありません。挿入しようとしているのはデータ型です。
テーブルの作成に使用したコードは次のとおりです。
CREATE TABLE Orders (
OrderId int NOT NULL,
OrderDate date NOT NULL,
OrderDesc varchar(255) NOT NULL,
CONSTRAINT PKOrders PRIMARY KEY CLUSTERED(OrderId, OrderDate)
);
テーブル定義から、OrderDate
列は日付を使用します データ型。
変装した祝福?
エラーが発生するのはイライラすることですが、これまでに起こった中で最高のことになることもあります。
コードでエラーが発生しない場合は、誤って間違ったデータをデータベースに挿入する可能性があります。これにより、データベースのデータ整合性が低下します。
OrderDate
を想像してみてください 列は日時です 日付の代わりに :
DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders (
OrderId int NOT NULL,
OrderDate datetime NOT NULL,
OrderDesc varchar(255) NOT NULL,
CONSTRAINT PKOrders PRIMARY KEY CLUSTERED(OrderId, OrderDate)
);
ここで、次のデータをそのテーブルに挿入しようとしていると想像してください。
INSERT INTO Orders(OrderId, OrderDate, OrderDesc)
VALUES (1, 1, 'Dog food');
結果:
(1 row affected)
は?エラーはありませんか?
その通り。エラーはありません。これは、日時が原因です タイプはintと互換性があります タイプ。つまり、SQLServerはintを使用しました 値を日時に変換します 値。
挿入操作後のテーブルは次のようになります。
SELECT * FROM Orders;
結果:
+-----------+-------------------------+-------------+ | OrderId | OrderDate | OrderDesc | |-----------+-------------------------+-------------| | 1 | 1900-01-02 00:00:00.000 | Dog food | +-----------+-------------------------+-------------+