sql - 从备份中复制一条 SQL 记录并插入数据库,保留主键
问题描述
我需要恢复已删除的表中的单行。我在数据库的备份副本中有该行。我知道我可以从一个数据库复制/粘贴到另一个数据库,但是(显然)这样做不会保留主键值,因此它看起来像一条新记录。
如何将此行插入表中,并保留原始主键值(这是唯一的)?还有其他表引用了这个 keyid,所以这样做可以防止我们不得不在其他地方进行更改。
解决方案
假设这是一个 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 权限。
推荐阅读
- r - 使用 rvest 按类名删除子节点
- java - 将其他 Java 项目 JAR 放入 Docker 映像?
- xml - 第一个节点上模板内的数据“数组”的 XSL 模板
- r - 在R studio中按升序和降序排序
- python - Pandas,根据前几行为每一行应用函数
- r - 更改 partykit::lmtree (mob) 图的 x 轴限制
- java - 外部 log4j.properties 文件有问题
- jquery - 我尝试使用文本框创建动态行,但不能在每个文本框上进行模糊处理
- c# - 在 C# 中是否有更快的方法来过滤基于 DateTime 的字典?
- python - NoSuchElementException - 硒