SQL选择删除DIRECTLY

时间:2016-02-17 13:53:31

标签: sql sql-server select sql-delete

我需要选择记录,检查我的选择标准并对其进行增强,直到我获得所需的所有记录,然后删除(或以其他方式更改)这些记录。让我们暂时删除。

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)?

2 个答案:

答案 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