【问题标题】:Is identity_insert reset to OFF at session close? [duplicate]会话关闭时 identity_insert 是否重置为 OFF? [复制]
【发布时间】:2018-02-08 13:51:53
【问题描述】:

SQL 服务器问题。虽然我的测试说“是”,但我更愿意从有经验的人那里听到。

当我使用 SET IDENTITY_INSERT some_table ON 时,我想知道我可以安全地关闭我的会话,而不必担心忘记将其设置为关闭,从而给其他用户带来麻烦。

【问题讨论】:

  • 没有什么可以重置的。它是会话级设置,而不是附加到您为其启用身份插入的表的设置。文档对此并不清楚,并且您拥有ALTER TABLE 权限的要求表明有关该表的某些内容已更改,但事实并非如此。在池连接的情况下(会话没有终止但被重置),问题应该是重置池连接是否也会重置IDENTITY_INSERT。我懒得测试这个,因为如果答案是“不”,我会太惊讶。

标签: sql-server tsql identity-insert


【解决方案1】:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/1a6ba2bb-5e82-47e8-a1a0-16fc044b951e/detect-current-identityinsert-settings?forum=transactsql

来自微软:

由于 SET IDENTITY_INSERT 是会话敏感的,它在缓冲区级别进行管理,而不存储在某处。这意味着我们不需要检查 IDENTITY_INSERT 状态,因为我们从不在当前会话中使用此关键字。

如果有什么不清楚的地方,欢迎追问。

谢谢,

金晨 - MSFT

【讨论】:

    【解决方案2】:

    是的。你可以这样测试:

    创建测试表集标识插入并插入其中。

    create table Test (
      TestIdentity int identity,
      SomeValue char(1)
    );
    
    set identity_insert Test ON
    insert into Test (
      TestIdentity,
      SomeValue
    ) values (
      1,
      'x'
    )
    

    打开新查询并尝试插入表而不设置身份插入。它会失败。

    insert into Test (
      TestIdentity,
      SomeValue
    ) values (
      2,
      'y'
    )
    

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 2013-06-09
      • 1970-01-01
      • 2021-08-27
      • 2015-10-18
      • 1970-01-01
      • 2011-10-02
      • 2012-04-24
      • 1970-01-01
      相关资源
      最近更新 更多