数据库范围相当于SET IDENTITY_INSERT OFF

时间:2008-10-23 16:26:39

标签: sql-server identity identity-insert

在我的eternal saga中插入来自SQL脚本的140万行数据,我编写了一个基本的WinForms应用程序,它接受脚本的每一行并单独执行。

但是,因为原始脚本包含

SET IDENTITY_INSERT [Table] OFF

和SET是一个会话范围的命令,这个设置在每次SQL调用时都会丢失,这意味着每一行都失败了。有没有办法在整个数据库范围内为整个表设置IDENTITY_INSERT,这样我可以在没有它们的情况下进行这些单独调用失败?或者我可以通过在每一行附加命令来告诉它忽略身份规范?

3 个答案:

答案 0 :(得分:5)

BULK INSERT不适合你吗?或者SQL Server导入/导出向导(herehere)?我知道导入/导出可以关闭整个导入的身份插入。我有理由相信你可以在BULK INSERT之前做到这一点

答案 1 :(得分:0)

我相信每次会话一次只能覆盖一个表IDENTITY INSERT。

您可能必须一次批量处理2或300个插入语句,并在每个批处理之前使用ident插入。

所以app会像这样执行一个块......

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;

答案 2 :(得分:0)

当有140万个插入作业正在进行时,是否还有其他任何东西要访问/插入表格。

如果没有,您可以在作业期间简单地在PK列上禁用身份吗?