我需要在已删除的表中恢复一行。我在数据库的备份副本中有该行。我知道我可以从一个数据库复制/粘贴到另一个数据库,但是(显然)这样做不能保留主键值,因此它看起来像是一条新记录。
如何将这一行插入表中并保留原始主键值(唯一)?还有其他表引用此keyid,因此这样做将避免我们不得不在其他位置进行更改。
答案 0 :(得分:2)
假定这是一个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;
以下是与此命令https://docs.microsoft.com/en-us/sql/t-sql/statements/set-identity-insert-transact-sql相关的MS Doc
任何其他类型的主键(例如,由NEWID()填充的唯一标识符)都不需要打开IDENTITY_INSERT。
还要注意,一次只能打开1个表IDENTITY_INSERT,并且发出命令的帐户必须拥有该表或对该表具有ALTER权限。
答案 1 :(得分:0)
假设您的桌子是这样设置的
create table tableWithAutoId (id int identity(1,1) primary key, val varchar(50))
仅执行此操作(这基本上就是您想要的)
insert into tableWithAutoId(id, val)values(1,'abc')
当IDENTITY_INSERT设置为OFF时,无法在表'tableWithAutoId'中为标识列插入显式值。
但是,如果先打开Identity_insert,则可以忽略列上的Identity
属性
set identity_insert tableWithAutoId ON
insert into tableWithAutoId(id, val)values(1,'abc')
完成后,请务必将其关闭。
set identity_insert tableWithAutoId ON
答案 2 :(得分:-2)
插入(列列表) 从中选择(列列表) 其中=值