Sql 生成插入脚本以从select语句还原表

Sql 生成插入脚本以从select语句还原表,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要从prod表中删除一些孤立记录。我需要删除的记录通过下面的查询返回。然而,在这样做之前,我想生成一个回滚计划,在那里我可以快速地重新插入记录。因此,我需要从下面的select语句创建insert脚本。我已经为此挣扎了一段时间,现在已经快要放弃了。如果有人能为我指引正确的方向,我将不胜感激: Select * from ALogs al where al.ActEnId is not null and not exists (select * from ActEn ae where ae.I

我需要从prod表中删除一些孤立记录。我需要删除的记录通过下面的查询返回。然而,在这样做之前,我想生成一个回滚计划,在那里我可以快速地重新插入记录。因此,我需要从下面的select语句创建insert脚本。我已经为此挣扎了一段时间,现在已经快要放弃了。如果有人能为我指引正确的方向,我将不胜感激:

Select *
from ALogs al
where al.ActEnId is not null
and not exists (select * from ActEn ae where ae.Id = al.ActEnId)
这是一个选项:

Select *
into test
from ALogs al
where al.ActEnId is not null
and not exists (select * from ActEn ae where ae.Id = al.ActEnId)
简单的

您可以对任意数量的列执行相同的操作:

为什么不简单地将delete放在一个可以回滚的事务中,或者在删除数据之前将数据插入临时表中。在这里使用事务似乎是正确的。我假设OP不打算让他的事务打开一段时间,以便他可以验证数据。我猜在这里使用事务是不对的。也许OP可以澄清目的?因为这肯定会改变我的方法。您可以从SELECT语句插入到表中,将这些行的副本存储在新表中,这样,如果需要将它们带回来,您就可以。这似乎比尝试创建INSERT语句更好(尽管这也是完全可能的)。dba应该知道,第一步是在对生产数据库执行任何破坏性操作之前进行备份。接下来,您需要确定一个方法,以确定您的查询是否正确地影响了数据库。一个名为Alogs的表听起来并不重要,但只有您知道。作为一个非常基本的测试,您可以在脚本之前和之后计算行数。也许以后重新运行select语句并验证孤儿不再存在。给定所涉及的列名-ActEnId-这些表之间是否存在(或应该存在)外键?