【问题标题】:How to replace IDENTITY ID in table column SQL 2008?如何替换表列 SQL 2008 中的 IDENTITY ID?
【发布时间】:2017-06-21 19:34:38
【问题描述】:

我不小心从表中删除了我的记录。该记录有一个键列,该键列与数据库中的其他一些表相关联。我已经恢复了数据库,并且可以访问之前删除的记录。当我尝试使用 INSERT SELECT 方法时,我收到消息'An explicit value for the identity column in table 'IEP.dbo.IEP' can only be specified when a column list is used and IDENTITY_INSERT is ON.' 然后我在所有列上运行插入,但在我的表设计中,身份设置为“是”的第一列。现在我想知道有没有办法更新密钥?新记录自动生成新密钥,我想将该值更新为旧密钥。示例如下:

旧/当前表:

i_key
1002491

临时/备份表:

i_key
975217

用临时列 i_key 值更新当前列 i_key 值的最佳解决方案是什么?如果有人可以提供帮助,请告诉我。谢谢!

【问题讨论】:

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


    【解决方案1】:

    您可以通过首先发出一个身份插入语句来做到这一点:

    SET IDENTITY_INSERT [tablename] ON  
    go
    
    (do insert)
    go
    
    SET IDENTITY_INSERT [tablename] Off
    go
    

    请务必在之后将其关闭,因为一次只能在一个表中插入身份。

    【讨论】:

    • 对不起,我错过了您想要更新 ID。这是你做不到的,我不相信,所以你实际上最好用无效的键删除记录并用你想要的键添加插入。
    • 这个解决方案对我有用。我刚刚删除了以前插入的记录。谢谢!
    【解决方案2】:

    您需要在更新前打开 IDENTITY_INSERT 选项,如下所示:

    SET IDENTITY_INSERT Table1 ON
    UPDATE [dbo].[Table1]
        SET [TrackingNumber2]=[TrackingNumber]
    SET IDENTITY_INSERT Table1 OFF
    

    【讨论】:

    • SET IDENTITY_INSERT 只允许您插入显式身份 - 不更新它们。
    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2015-09-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多