【问题标题】:INSERT record to SQL table with IDENTITY columnINSERT 记录到带有 IDENTITY 列的 SQL 表
【发布时间】:2013-05-27 05:44:03
【问题描述】:

我有这个 sql 表

CREATE TABLE Notes(
    NoteID [int] IDENTITY(1,1) NOT NULL,
    NoteTitle [nvarchar](255) NULL,
    NoteDescription [nvarchar](4000) NULL
) CONSTRAINT [PK_Notes] PRIMARY KEY CLUSTERED 
(
    NoteID ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,
 ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

我想从一个临时表中复制记录,包括 NoteID(使用 sql 查询)..

这是我的脚本:

SET IDENTITY_INSERT Notes OFF

INSERT INTO Notes (NoteID, NoteTitle,NoteDescription)
SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp

SET IDENTITY_INSERT Notes ON

使用这个脚本,我得到一个错误:

Cannot insert explicit value for identity column in table 'Notes' when IDENTITY_INSERT is set to OFF.

是否有其他方法可以使用 sql 查询向具有标识列的表中插入记录?

【问题讨论】:

    标签: sql


    【解决方案1】:

    改变OFF和ON左右

    SET IDENTITY_INSERT Notes ON
    
    INSERT INTO Notes (NoteID, NoteTitle,NoteDescription)
    SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp
    
    SET IDENTITY_INSERT Notes OFF
    

    【讨论】:

    • 感谢@astander。当我尝试过这个时,我遇到了另一个错误:“列名或提供的值的数量与表定义不匹配。”
    • 哎呀!别介意我的评论,我做了一件愚蠢的事情,我提到的错误是针对我的脚本的不同行。无论如何,改变 OFF 和 ON 确实解决了我的问题,非常感谢
    • 如果我想在 Notes 表中添加新列时保护我的查询,该怎么办。它不会复制新创建的列的数据,因为它没有在查询中提及。
    【解决方案2】:
    SET IDENTITY_INSERT Notes ON
    
    INSERT INTO Notes
    /*Note the column list is REQUIRED here, not optional*/
    (NoteID, NoteTitle,NoteDescription)
    SELECT NoteID, NoteTitle,NoteDescription from Notes_Temp
    
    SET IDENTITY_INSERT Notes OFF
    

    您正在为作为标识列的 NoteId 插入值。 您可以像这样在表上打开标识插入,以便您可以指定自己的标识值。

    【讨论】:

      【解决方案3】:

      想必你使用的是SQL Server(你没说),误解了IDENTITY_INSERT的含义和目的。通常,不允许显式设置 IDENTITY 列的值,但通过将表的 IDENTITY_INSERT 设置为 ON,您可以暂时允许此类插入。

      【讨论】:

      • 嗯,谢谢@oldpro .. 我想我确实误解了 IDENTITY_INSERT 的目的。多么可耻..但再次让我尝试将其设置为 ON
      猜你喜欢
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多