恢复包含标识列

时间:2015-09-21 07:16:41

标签: tsql sql-server-2008-r2

我们有几张桌子的数据被删除了。

现在我运行了一个复制数据库,我们可以恢复丢失的数据。这是在同一服务器实例中运行。

但是,id列现在不同步。由于某些行显然已被删除,因此例如新表数据中的第98行是98.但旧表中可能有101行。

是否可以复制表中的所有数据,包括id?或者我可以从列中关闭身份。暂停数据,然后重新打开。

我尝试过以下代码;

Truncate Table DEV_DB.dbo.UserNames 
Go

Set Identity_Insert DEV_DB.dbo.UserNames On

    Insert Into DEV_DB.dbo.UserNames
    Select * From LIVE_DB.dbo.UserNames

Set Identity_Insert DEV_DB.dbo.UserNames Off

但是我收到了错误

Msg 8101, Level 16, State 1, Line 6
     

只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'DEV_DB.dbo.UserNames'中标识列的显式值。

2 个答案:

答案 0 :(得分:0)

您需要更仔细地阅读错误:

  

信息8101,第16级,状态1,第6行

     

仅当使用列列表且IDENTITY_INSERT为ON时,才能为表DEV_DB.dbo.UserNames中的identity列指定一个显式值。

请注意,它说“只能在使用列列表时使用”。您没有在INSERT中使用列列表。如果指定了列列表,则该列表应该成功。看起来像这样:

SET IDENTITY_INSERT DEV_DB.dbo.UserNames ON;
INSERT INTO DEV_DB.dbo.UserNames (
     Id
    ,Column1
    ,Column2
) SELECT *
FROM LIVE_DB.dbo.UserNames;
SET IDENTITY_INSERT DEV_DB.dbo.UserNames OFF;

但是,编写该代码可能很繁琐。您可能需要使用其他代码来生成SQL语句。

答案 1 :(得分:-1)

我要做的是避免这种情况是在一个新表中你要复制不要使id成为自动增量 通过循环复制数据,id将保持不变

创建一个包含一列(Not Auto Inc)的单独表格,并将最后一个记录号码放在那里

然后在添加新记录时创建一个脚本来获取最后一个数字并将其增加一个并将该数字用于新记录。

永远不会有丢失身份证号码的问题。