我需要选择记录,检查我的选择标准并对其进行增强,直到我获得所需的所有记录,然后删除(或以其他方式更改)这些记录。让我们暂时删除。
select <fields> from <database> where <condition>
(检查,调整条件)
delete from <database> where (<same condition>)
这里有一种更简单的方法,比如管道,将选定的记录直接推送到删除语句中吗?我使用了将所有记录号选入临时数据库的技术,但是没有直接的方法吗?
我搜索了Stack Overflow,发现了一些问题,人们会问如何将select语句转换为delete语句,这不是我想要的。我想到的是:
select ... from ... where ... | delete
或者像这样的解决方法......
/* create a list of records to delete */
select ... from ... where ... into @temp
/* shove the list into delete */
delete @temp
SQL标准是否支持我想要的机制,或者是否有特定于平台的方法(MS SQL Server)?
答案 0 :(得分:5)
您可以使用Common Table Expression
,如下所示:
;WITH CTE AS (
select <fields>
from <table>
where <condition>
)
DELETE FROM CTE
此语句将删除查询返回的所有记录。
您可以选择添加应用于CTE查询返回的内联表的额外条件,例如:
;WITH CTE AS (
select <fields>
from <table>
where <condition>
)
DELETE FROM CTE
WHERE <more conditions on CTE fields>
答案 1 :(得分:1)
鉴于您似乎正在对数据进行某种手动操作,我建议将您在事务中执行的操作包装起来。这样您就可以在声明成为永久声明之前查看声明的结果。
SELECT * FROM [table];
BEGIN TRAN
DELETE FROM [table] WHERE [predicate];
SELECT * FROM [table];
ROLLBACK TRAN
--COMMIT TRAN