Tsql 恢复包含标识列的sql表

Tsql 恢复包含标识列的sql表,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,我们有几个表的数据被删除了 现在我有了一个运行的复制数据库,在那里我们可以恢复丢失的数据。这在同一服务器实例中运行 但是,id列现在不同步。由于一些行显然随着时间的推移而被删除,因此,例如,新表中的第98行数据是98。但可能是老桌子上的101 是否可以从表中复制包括id在内的所有数据?或者我可以从列中关闭标识。禁用数据,然后将其重新打开 我尝试了以下代码 Truncate Table DEV_DB.dbo.UserNames Go Set Identity_Insert DEV_DB.dbo

我们有几个表的数据被删除了

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

但是,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
但是我得到了错误

只有在使用列列表且启用identity_INSERT时,才能为表“DEV_DB.dbo.UserNames”中的identity列指定显式值


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

创建一个单独的表,其中有一列不是自动Inc,并将最后一个记录编号放在其中

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


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

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

Msg 8101,16级,状态1,第6行

只有在使用列列表且启用identity_INSERT时,才能为表“DEV_DB.dbo.UserNames”中的identity列指定显式值

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

在上设置IDENTITY_INSERT DEV_DB.dbo.UserNames; 在DEV_DB.dbo.UserNames中插入 身份证件 ,第1栏 ,第2栏 挑选* 来自LIVE_DB.dbo.UserNames; 将IDENTITY_INSERT DEV_DB.dbo.UserNames设置为OFF;
然而,写这篇文章可能会很乏味。您可能希望使用其他代码生成SQL语句。

看起来您需要@VladimirBaranov谢谢您,我在另一个堆栈问题中找到了一些代码,但是我遇到了这个错误。有什么想法吗?当使用列列表时。显式列出所有列而不是*。每个表中大约有30列。这是没有办法的吗?这两种说法都是如此。或者只是插入或选择?我不知道怎么解决。在SSMS中右键单击表格,然后选择脚本表格作为-插入到…确定可以更具体一些,即为此提供一些示例代码。
Msg 8101, Level 16, State 1, Line 6