SET IDENTITY_INSERT xyz ON
的範圍是什麼?SET IDENTITY_INSERT xyz ON的範圍是什麼?
如果我在某個表的某個存儲過程中使用它,如果運行不同過程的不同用戶同時插入到某個表中,會發生什麼情況?
另外,如果不同的用戶/程序試圖同時爲不同的表設置SET IDENTITY_INSERT xyz ON
會發生什麼?
SET IDENTITY_INSERT xyz ON
的範圍是什麼?SET IDENTITY_INSERT xyz ON的範圍是什麼?
如果我在某個表的某個存儲過程中使用它,如果運行不同過程的不同用戶同時插入到某個表中,會發生什麼情況?
另外,如果不同的用戶/程序試圖同時爲不同的表設置SET IDENTITY_INSERT xyz ON
會發生什麼?
這是一個會話選項一張桌子一次只能有一個桌子上的選項,但多個不同的會話可以在同一張桌子上(不確定這會是一個好主意,但!)
當一個子批處理完成(設置此選項)時,它看起來像它會自動取消連接。
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
會話=連接? – RacerX 2011-04-26 14:43:59
@RacerX - 是的,但看到我的評論關於它被重置,當你上調用堆棧。 – 2011-04-26 14:47:31
我的測試(SQL 2008 R2)顯示,列上的身份仍然規格捧出來的正確的價值觀在一個會話,即使該表具有另一個會話IDENTITY_INSERT ON
。
您應該能夠在一個會話(具有IDENTITY_INSERT ON
)中將數據批量插入具有特定標識列值的表中,而另一個用戶(在另一個會話中)則依賴於標識列才能正常工作。
不管做什麼,我都會非常謹慎。 Set_identity insert on只應該很少完成,偶爾導入的數據從另一個必須保留其身份的系統中移動,通常只有當您首次初始化系統時纔會導入數據。在應用程序中使用它是非常糟糕的做法。如果兩個用戶想爲不同的記錄插入相同的值,該怎麼辦?爲什麼身份是自動生成的,並且他們應該保持這種方式,或者你不應該使用它們。 – HLGEM 2011-04-26 14:59:00
@HLGEM,這是恢復功能的一部分,其中刪除的數據被添加回來(從歷史日誌表複製) – RacerX 2011-04-28 12:52:34