为数据集插入关闭IDENTITY_INSERT

Nat*_*oop 27 sql-server dataset uniqueidentifier

我正在使用数据集插入从旧数据库转换的数据.要求是维护当前的Order_ID号码.

我尝试过使用:

SET IDENTITY_INSERT orders ON;
Run Code Online (Sandbox Code Playgroud)

这在我在SqlServer Management Studio中时有效,我能够成功

INSERT INTO orders (order_Id, ...) VALUES ( 1, ...);
Run Code Online (Sandbox Code Playgroud)

但是,它不允许我通过我在转换脚本中使用的数据集插入来执行此操作.看起来基本上是这样的:

dsOrders.Insert(oldorderId, ...);
Run Code Online (Sandbox Code Playgroud)

我也在这个过程中运行SQL(SET IDENTITY_INSERT命令为ON).我知道我一次只能对着一张桌子这样做而且我是.

我一直得到这个例外:

尝试向订单表中插入值时出现异常System.Data.SqlClient.SqlException:当IDENTITY_INSERT设置为OFF时,无法在表'orders'中为identity列插入显式值.

有任何想法吗?

更新

AlexS和AlexKuznetsov已经提到Set Identity_Insert是一个连接级别设置,但是,当我在SqlProfiler中查看SQL时,我注意到了几个命令.

  • 第一 - SET IDENTITY_INSERT DEAL ON
  • 第二 - exec sp_reset_connection
  • 第三到n - 我的各种sql命令,包括select&insert's

exec sp_reset_connection但是命令之间总是存在,我相信这是Identity_Insert设置中的值丢失的原因.

有没有办法阻止我的数据集进行连接重置?

mar*_*c_s 53

你有混淆的选择:

SET IDENTITY_INSERT orders ON
Run Code Online (Sandbox Code Playgroud)

会变成ON插入特定值(您指定)入表中的IDENTITY列的能力.

SET IDENTITY_INSERT orders OFF
Run Code Online (Sandbox Code Playgroud)

再次关闭该行为并恢复正常行为(您无法指定IDENTITY列的值,因为它们是自动生成的)将恢复.


Eri*_*lje 5

您想要SET IDENTITY_INSERT ON以允许您插入标识列.

它似乎有点倒退,但这就是它的工作方式.