【问题标题】:MSSQL 2008 SET IDENTITY INSERT on live database实时数据库上的 MSSQL 2008 SET IDENTITY INSERT
【发布时间】:2017-02-20 06:38:46
【问题描述】:

我的工作需要每天更新一次表格:-

SET IDENTITY INSERT ON

。但是与此同时,其他用户正在使用这个实时数据库并插入记录,这必须使用SET IDENTITY INSERT OFF 来完成。

有什么方法可以运行作业,同时仍然允许用户插入记录?

【问题讨论】:

  • 不是反过来吗? jub 不需要 set identity insert on 而用户要求它关闭吗?
  • 你是对的。该作业需要开启身份插入,而正在进行的事务需要关闭身份插入。
  • “工作需要身份插入开启,而正在进行的交易需要身份插入关闭” - 这有点奇怪

标签: sql-server sql-server-2008 identity


【解决方案1】:

这没有问题。

设置IDENTITY INSERT的范围是session

所以如果你使用下一个代码:

SET IDENTITY_INSERT TableName ON
Insert statement ...

其他用户表示其他会话,因此如果他们尝试插入身份,他们将收到下一个错误:-

无法为表“TableName”中的标识列插入显式值 当 IDENTITY_INSERT 设置为 OFF 时。

来自MSDN:-

在任何时候,会话中只有一个表可以有 IDENTITY_INSERT 属性设置为 ON。如果表已经将此属性设置为 ON, 并为另一个表发出 SET IDENTITY_INSERT ON 语句, SQL Server 返回一条错误消息,指出 SET IDENTITY_INSERT 是 已经开启并报告它设置为开启的表。

【讨论】:

  • 所以一些用户可以使用 Identity_Insert ON 访问表,而同时其他用户可以使用 identity_insert_off 访问同一个表?
  • 是的,正如 MSDN 告诉我们的,它的范围是会话。
  • 请在您的情况下使用序列。
猜你喜欢
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 2014-01-05
  • 1970-01-01
  • 2018-03-12
  • 2018-04-21
相关资源
最近更新 更多