保留事件行中的主键需要还原。

3
我有一个SQL数据库,其中包含一对多和多对多的关系。大部分的关系都基于一个自动递增字段"ID"。在某些情况下,当从表格中删除行时,我会将多个表格的所有数据导出到XML文件中,然后再从数据库中删除这些数据,以防以后需要恢复这些数据。
那么,这些数据库ID会如何处理?我能否简单地将数据恢复到现有数据库中,使得IDs和关系保持不变?
如果您有任何建议,将不胜感激!
2个回答

1

即使是在 IDENTITY 字段中,只要使用 SET IDENTITY_INSERT [table] ON,您也可以重新插入数据。

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

简单回答:是的。在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

请注意,为了满足任何外键关系,您需要先将数据重新插入到“一对多”表中,然后再插入到“多对多”表中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接