2008-10-23 31 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列上的身份?