web-dev-qa-db-ja.com

SQL Server 2008を使用してIDENTITY_INSERTを有効または無効にする方法

IDENTITY_INSERTがOFFに設定されているときに挿入を実行するとエラーが発生するのはなぜですか?

SQL Server 2008で正しく有効にするにはどうすればよいですか。 SQL Server Management Studioを使用していますか?

私はこのクエリを実行しました:

SET IDENTITY_INSERT Database. dbo. Baskets ON

その後、コマンドが正常に完了したというメッセージがコンソールに表示されました。ただし、アプリケーションを実行しても、以下のようなエラーメッセージが表示されます。

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.
390
Beginner

SQL経由で MSDN に従って

SET IDENTITY_INSERT sometableWithIdentity ON

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF

完全なエラーメッセージは正確に何が悪いのかを教えてくれます...

IDENTITY_INSERTがOFFに設定されていると、テーブル 'sometableWithIdentity'のID列に明示的な値を挿入できません。

664
gbn

IDENTITY_INSERTをONに設定した後でも挿入できないという問題がありました。

問題は、私は列名を指定していないということであり、そして何らかの理由でそれがそれを好まなかったということでした。

INSERT INTO tbl Values(vals)

だから基本的に完全なINSERT INTO tbl(cols)値(vals)

51
Ismael

インポート:INSERTステートメントに列を書く必要があります

INSERT INTO TABLE
SELECT * FROM    

正しくありません。

Insert into Table(Field1,...)
Select (Field1,...) from TABLE

正しい

32
R.Alonso

私はこれが古いスレッドであることを知っていますが、私はこれにぶつかっただけです。ユーザーが他のセッションSet IDENTITY_INSERTをオンにした後にIdentity列で挿入を実行しようとしている場合、ユーザーは上記のエラーを受け取ることになります。

Identity Insert値の設定とそれに続くInsert DMLコマンドは同じセッションで実行されます。

ここで@BeginnerはIdentity Insertを個別にONに設定してから、自分のアプリケーションから挿入を実行していました。彼は以下のエラーを得た理由です:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.
3
aok

SET IDENTITY_INSERTデータベースを置くことが必要に見えます。 dbo。バスケットON。各SQL INSERTがバッチを送信する前に。/1つのSET IDENTITY_INSERT ... ONで始まる複数のINSERT ... VALUES ..コマンドを送信できます。先頭の文字列/の間にバッチセパレータを置かないでください。/ /送信ブロックの後にSET IDENTITY_INSERT ... ONが機能しなくなる理由がわかりません(例:c#の.ExecuteNonQuery()の場合)。 IDENTITY_INSERT ... ON。次のSQLコマンド文字列の先頭にもあります。

0
Jettero

PRIMARY KEYフィールドがあり、重複している値を挿入しているか、INSERT_IDENTITYフラグがonに設定されている場合に、これが発生する可能性があります。

0
seanyp20001