我有一个SQL数据库,其中包含一对多和多对多的关系。大部分的关系都基于一个自动递增字段"ID"。在某些情况下,当从表格中删除行时,我会将多个表格的所有数据导出到XML文件中,然后再从数据库中删除这些数据,以防以后需要恢复这些数据。
那么,这些数据库ID会如何处理?我能否简单地将数据恢复到现有数据库中,使得IDs和关系保持不变?
如果您有任何建议,将不胜感激!
那么,这些数据库ID会如何处理?我能否简单地将数据恢复到现有数据库中,使得IDs和关系保持不变?
如果您有任何建议,将不胜感激!
即使是在 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
一旦您使用主键重新创建了记录,那么您就可以在使用它们作为外键的表中重新创建这些记录。
简单回答:是的。在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