首页 > 解决方案 > 从备份中复制一条 SQL 记录并插入数据库,保留主键

问题描述

我需要恢复已删除的表中的单行。我在数据库的备份副本中有该行。我知道我可以从一个数据库复制/粘贴到另一个数据库,但是(显然)这样做不会保留主键值,因此它看起来像一条新记录。

如何将此行插入表中,并保留原始主键值(这是唯一的)?还有其他表引用了这个 keyid,所以这样做可以防止我们不得不在其他地方进行更改。

标签: sqlsql-server

解决方案


假设这是一个 IDENTITY 列(它执行递增的 INT/BIGINT 的自动插入),那么您需要运行 SET IDENTITY_INSERT 命令。

SET IDENTITY_INSERT dbo.MyTable ON;

INSERT INTO dbo.MyTable (Id, Columns) SELECT Id, Columns FROM BackupDb.dbo.MyTable WHERE Id = DeletedRowID 

SET IDENTITY_INSERT dbo.MyTable OFF;

这是与此命令相关的 MS Doc https://docs.microsoft.com/en-us/sql/t-sql/statements/set-identity-insert-transact-sql

任何其他类型的主键(例如由 NEWID() 填充的唯一标识符)都不需要打开 IDENTITY_INSERT。

另请注意,一次只能打开 1 个表 IDENTITY_INSERT,并且发出命令的帐户必须拥有或具有该表的 ALTER 权限。


推荐阅读