SQL select 直接删除

SQL select into delete DIRECTLY

我需要 select 条记录,检查我的 select 标准并增强它直到我得到我需要的所有记录,然后删除(或以其他方式更改)那些。让我们暂时删除。

select <fields> from <database> where <condition>

(检查、调整条件)

delete from <database> where (<same condition>)

这不是更简单的方法吗,例如管道,将 selected 记录直接推入 delete 语句?我使用技术 select 将所有记录编号输入临时数据库,但是没有直接的方法吗?

我搜索了 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 服务器)?

您可以使用 Common Table Expression,像这样:

;WITH CTE AS (
   select <fields>  
   from <table> 
   where <condition>
)
DELETE FROM CTE

此语句将删除您的查询返回的所有记录

您可以选择添加应用于 CTE 查询返回的内联 table 的额外条件,例如:

;WITH CTE AS (
   select <fields>  
   from <table> 
   where <condition>
)
DELETE FROM CTE 
WHERE <more conditions on CTE fields>

鉴于您似乎正在对数据执行某种手动操作,我建议将您所做的任何事情包装在事务中。这将允许您在将声明永久化之前查看声明的结果。

SELECT * FROM [table];

BEGIN TRAN

DELETE FROM [table] WHERE [predicate];
SELECT * FROM [table];

ROLLBACK TRAN
--COMMIT TRAN