【问题标题】:IDENTITY_INSERT is set to OFF - How to turn it ON?IDENTITY_INSERT 设置为 OFF - 如何将其打开?
【发布时间】:2011-03-07 22:56:01
【问题描述】:

我有一个已删除的文件存档数据库,其中存储了已删除文件的 ID,我希望管理员能够恢复该文件(以及用于链接文件的相同 ID)。我不想将 identity_insert 从整个表中删除,因为加一效果很好。在我插入TBL_Content 存储过程中,我有这样的东西

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
SET IDENTITY_INSERT tbl_content ON
GO

ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
@ContentID int, 
...insert command...
SET IDENTITY_INSERT tbl_content OFF

但我一直收到同样的错误:

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

有什么帮助吗?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    您是否应该在存储过程中将身份插入设置为开启?看起来您仅在更改存储过程时才将其设置为 on,而不是在实际调用它时。试试:

    ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
    @ContentID int, 
    
    SET IDENTITY_INSERT tbl_content ON
    
    ...insert command...
    
    SET IDENTITY_INSERT tbl_content OFF
    GO
    

    【讨论】:

      【解决方案2】:

      我相信它需要在单个查询批处理中完成。基本上,GO 语句将您的命令分成多个批次,这就是导致问题的原因。改成这样:

      SET IDENTITY_INSERT tbl_content ON
      /* GO */
      
      ...insert command...
      
      SET IDENTITY_INSERT tbl_content OFF
      GO
      

      【讨论】:

      • 你说得对。这就是重点!下一个插入命令批处理应以 SET IDENTITY_INSERT tbl_content ON;再次命令。
      【解决方案3】:

      您不应该将 identity_Insert 设置为 ON,插入记录然后再将其关闭吗?

      像这样:

      set ANSI_NULLS ON
      set QUOTED_IDENTIFIER ON
      SET IDENTITY_INSERT tbl_content ON
      GO
      
      ALTER procedure [dbo].[spInsertDeletedIntoTBLContent]
      @ContentID int, 
      SET IDENTITY_INSERT tbl_content ON
      ...insert command...
      SET IDENTITY_INSERT tbl_content OFF
      

      【讨论】:

        【解决方案4】:

        提醒

        SQL Server 只允许一个表将 IDENTITY_INSERT 属性设置为 ON。

        这不起作用:

        SET IDENTITY_INSERT TableA ON
        SET IDENTITY_INSERT TableB ON
        ... INSERT ON TableA ...
        ... INSERT ON TableB ...
        SET IDENTITY_INSERT TableA OFF
        SET IDENTITY_INSERT TableB OFF
        

        改为:

        SET IDENTITY_INSERT TableA ON
        ... INSERT ON TableA ...
        SET IDENTITY_INSERT TableA OFF
        SET IDENTITY_INSERT TableB ON
        ... INSERT ON TableB ...
        SET IDENTITY_INSERT TableB OFF
        

        【讨论】:

          【解决方案5】:

          在查询上方添加这一行

          SET IDENTITY_INSERT tbl_content ON
          

          【讨论】:

            【解决方案6】:

            参考:http://technet.microsoft.com/en-us/library/aa259221%28v=sql.80%29.aspx

            我的表名为Genre,包含IdNameSortOrder 3 列

            我使用的代码如下:

            SET IDENTITY_INSERT Genre ON
            
            INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20) 
            

            【讨论】:

              【解决方案7】:

              加衬也

               SET IDENTITY_INSERT Genre ON
              
                  INSERT INTO Genre(Id, Name, SortOrder)VALUES (12,'Moody Blues', 20) 
              
                  SET IDENTITY_INSERT Genre  OFF
              

              【讨论】:

                【解决方案8】:

                我有两个不同的表,第一个插入工作正常,但第二个会引发有关身份插入的异常。 问题是 表有一个字段(int)作为未填充的伪造密钥

                【讨论】:

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