2011-04-26 7 views
13

SET IDENTITY_INSERT xyz ONの範囲はどこですか?SET IDENTITY_INSERT xyz ONの有効範囲は何ですか?

特定のテーブルのストアドプロシージャでこれを使用すると、別のプロシージャを実行している別のユーザーがその特定のテーブルに同時に挿入するとどうなりますか?

また、異なるユーザー/プロシージャが異なるテーブルに対して同時にSET IDENTITY_INSERT xyz ON を設定しようとするとどうなりますか?

+0

私は何をしていてもこれを行うことに非常に注意します。 Set_identityの挿入はまれにしか行われず、通常はシステムを最初に初期化したときにのみIDを保持しなければならない別のシステムからデータを移動することがあります。アプリケーションでこれを使用することは非常に貧しい方法です。 2人のユーザーが異なるレコードに同じ値を挿入する場合はどうなりますか?アイデンティティが自動生成され、このようにしなければならない、またはそれらを使用しないでください。 – HLGEM

+1

@HLGEM、これは復元されたデータの一部(履歴ログテーブルからコピーされたもの)です。 – RacerX

答えて

11

セッションオプションテーブルは一度に1つのテーブルに対してのみオプションを持つことができますが、同じテーブルに対して複数の異なるセッションを持つことができます(ただしこれは良い考えになるでしょうか?)

子バッチが終了すると(このオプションが設定されている)、自動的に接続の設定が解除されるように見えます。

CREATE TABLE Tst 
(C INT IDENTITY(1,1)) 

EXEC('SET IDENTITY_INSERT Tst ON') 
INSERT INTO Tst(C) VALUES (1) /*Fails - Complains IDENTITY_INSERT is off*/ 

SET IDENTITY_INSERT Tst ON 
EXEC('INSERT INTO Tst(C) VALUES (1)') /*Succeeds this way round*/ 
SET IDENTITY_INSERT Tst OFF 
+0

はセッション=接続していますか? – RacerX

+0

@RacerX - はい、あなたはコールスタックを上がるにつれてリセットされているとの私のコメントを参照してください。 –

3

私のテスト(SQL 2008 R2)は、カラム上のアイデンティティの仕様はまだ表には、別のセッションでIDENTITY_INSERT ONを持っている場合でも、1つのセッションで正しい値を渡していることを示しています。

別のユーザー(別のセッションで)が正常に機能するID列に依存している間に、特定のID列値を1つのセッション(IDENTITY_INSERT ON)で一括してデータを表に挿入できます。

関連する問題