2008-10-23 59 views
1

在我的eternalsaga中,爲了從SQL腳本中插入140萬行數據,我編寫了一個基本的WinForms應用程序,它接收腳本的每一行並單獨執行它。數據庫範圍內的等效SET IDENTITY_INSERT OFF

然而,因爲原來的腳本包含

SET IDENTITY_INSERT [Table] OFF 

和SET是一個會話範圍的命令,此設置迷路每個SQL調用,這意味着每行失敗。是否有一種方法可以在數據庫範圍內爲整個表設置IDENTITY_INSERT,這樣我就可以在沒有失敗的情況下進行這些單獨的調用?或者也許我可以通過給每行添加命令來讓它忽略身份規範?

回答

5

BULK INSERT不適合你嗎?或者SQL Server導入/導出嚮導(herehere)?我知道導入/導出可以關閉整個導入的身份插入。我相當肯定你可以在BULK INSERT之前做到這一點

+0

您也可能想要查看bcp實用程序來執行此操作,它專門爲此任務而設計。 http://msdn.microsoft.com/en-us/library/ms162802.aspx 有一個命令行選項,用於bcp使用導入數據中的指定文件覆蓋標識列。 – esarjeant 2008-10-23 17:00:36

0

我相信IDENTITY INSERT只能在每次會話中一次覆蓋一張表。

您必須一次可以批量增加2或300個插入語句,並且每個批次都使用ident插入。

因此應用程序將執行這樣的塊....

SET IDENTITY_INSERT [Table] OFF; 
INSERT INTO TABLE VALUES (1, 'a'); 
INSERT INTO TABLE VALUES (2, 'b'); 
INSERT INTO TABLE VALUES (3, 'c'); 
INSERT INTO TABLE VALUES (4, 'd'); 
INSERT INTO TABLE VALUES (5, 'e'); 
SET IDENTITY_INSERT [Table] ON; 
0

是其他任何將要訪問/插入表中,而這140萬的插入工作是怎麼回事。

如果沒有,您可以簡單地在工作期間禁用PK列上的身份?