0

強制自動インクリメント列を持つテーブルがあります。しかし、値を明示的に挿入する必要がある場合があります。この目的のために、IDをオンに設定しましたが、機能していません

コードは次のとおりです。

SET IDENTITY_INSERT [menu_code] on

INSERT INTO [dbo].[menu_code]
VALUES('', '', '', '', '',
       1  -- Auto Generated Identity column
        ,'', '')
4

1 に答える 1

3

エラー メッセージは、問題の原因を明確に示しています。

テーブル 'dbo.menu_code' の ID 列の明示的な値は、列リストが使用され、IDENTITY_INSERT が ONの場合にのみ指定できます。

値を挿入しようとしている列を明示的に定義する必要があります。

SET IDENTITY_INSERT [menu_code] ON

INSERT INTO [dbo].[menu_code] (Col1, Col2, Col3, Col4, Col5, IdentityCol, Col6, Col7)
VALUES('', '', '', '', '',
       1  -- Auto Generated Identity column
        ,'', '')

SET IDENTITY_INSERT [menu_code] OFF

いずれにせよ、これを常に行うことをお勧めします。列のリスト (onINSERTSELECTステートメントの両方) を省略すると、後で厄介な驚きに備えることになります。はい、少し入力する必要があります - 一度、クエリを作成するとき - しかし、頭痛の種と厄介なバグを見つけようとする時間を数え切れないほど節約できます...操作したい列のリストを明示的に定義するだけです、いつも。

更新:別のテーブルからこれらの値を挿入する場合は、 との両方で列名の明示的なリストを使用することを強くINSERTお勧めしSELECTます。

SET IDENTITY_INSERT [menu_code] ON

INSERT INTO [dbo].[menu_code] (Col1, Col2, Col3, Col4, Col5, IdentityCol, Col6, Col7)
   SELECT Col1, Col2, Col3, Col4, Col5, IdentityCol, Col6, Col7
   FROM DM_LUBRICANTS.dbo.menu_code 

SET IDENTITY_INSERT [menu_code] OFF
于 2013-03-07T06:20:45.287 に答える