在我的eternal saga中插入来自SQL脚本的140万行数据,我编写了一个基本的WinForms应用程序,它接受脚本的每一行并单独执行。
但是,因为原始脚本包含
SET IDENTITY_INSERT [Table] OFF
和SET是一个会话范围的命令,这个设置在每次SQL调用时都会丢失,这意味着每一行都失败了。有没有办法在整个数据库范围内为整个表设置IDENTITY_INSERT,这样我可以在没有它们的情况下进行这些单独调用失败?或者我可以通过在每一行附加命令来告诉它忽略身份规范?
答案 0 :(得分:5)
BULK INSERT不适合你吗?或者SQL Server导入/导出向导(here或here)?我知道导入/导出可以关闭整个导入的身份插入。我有理由相信你可以在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列上禁用身份吗?