保留事件行中的主键需要恢复

时间:2012-04-26 12:27:49

标签: sql sql-server tsql primary-key database-restore

我有一个具有一对多和多对多关系的SQL数据库。大多数关系基于自动增量字段“ID”。在某些情况下,当删除表中的行时,如果此数据需要在以后恢复,则在从数据库中删除数据之前,将所有数据从多个表导出到XML文件。

如何处理数据库ID?我可以简单地将数据恢复到现有数据库中,并且Ids和关系将保持不变吗?

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

如果您使用SET IDENTITY_INSERT [table] ON

,您可以重新插入数据,甚至可以重新插入IDENTITY字段
SET IDENTITY_INSERT yourTable ON

INSERT INTO
  yourTable (
    id,
    field1,
    field2
  )
SELECT
  id,
  field1,
  field2
FROM
  yourBackup

SET IDENTITY_INSERT yourTable OFF

请注意,您必须在INSERT语句中指定所有字段,包括ID。


使用主键重新创建记录后,您可以在使用它们作为外键的表中重新创建记录。

答案 1 :(得分:1)

简短回答:是的。 SQL Server中有一个针对每个表设置的标志,指示是否允许为标识列指定值。默认情况下,它已关闭。重新插入数据时,您需要暂时启用它:

DECLARE @Id int
DECLARE @Name varchar(20) = 'Dave'


INSERT INTO Example(Name) VALUES(@Name)

SET @Id = SCOPE_IDENTITY()

DELETE FROM Example WHERE Id = @Id


SET IDENTITY_INSERT Example ON

INSERT INTO Example(Id, Name) VALUES(@Id, @Name)

SET IDENTITY_INSERT Example OFF

请注意,为了满足任何外键关系,您需要在“many”表之前将数据重新插入“one”表。