如何将带有现有密钥的DataTable插入SQL Server表

database datatable sqlbulkcopy sql-server vb.net

我正在使用VB.NET ..我有一个名为“QUESTION”的DataTable,包含3个字段:

  • QuestionNumber(唯一整数键)
  • QuestionText
  • 问题类型

在我的SQL Server数据库中,我创建了一个名为“QUESTION”的表,其中包含相同的字段。 QuestionNumber定义为整数唯一键,自动增量

现在,当我制作批量拷贝以将DataTable插入SQL Server时,数据库将覆盖DataTable中的QuestionNumber并生成新的(从1增量1开始)。

如何更改我的数据库设置,将原始的QuestionNumbers复制到数据库中?

一般承认的答案

当只是使用插入尝试:

SET IDENTITY_INSERT [your table] ON
INSERT INTO [your table] (identityCol, col1,...) VALUES (identityCol, col1,...)
SET IDENTITY_INSERT [your table] OFF

批量复制数据时,需要在命令中添加特殊参数/开关/提示,详细说明如下:

批量导入数据时保持身份值


热门答案

查找IDENTITY INSERT。你打开它。更新表格,然后将其关闭。

SET IDENTITY_INSERT table ON

请注意,您一次只能在一张桌子上使用它。如果为另一个表打开它,它会在最后一个表上关闭。

如果插入的值高于最大现有值,则会将其自身重新设置为该值,以便所有新值都更大。

再次,不要忘记关闭它:

SET IDENTITY_INSERT table OFF

如果你真的在做BULK INSERT,那么不要忘记KEEPIDENTITY限定符,它告诉服务器不要忽略你的身份值,否则,它将忽略你的标识值并为标识列生成新的标识值。

批量导入数据时保持身份值



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因