返回已删除项目的 ID 列表

Returning a list of ids of deleted items

我不确定这是不可能的,还是我只是找不到解决方案。

我正在尝试编写一个 SQL 存储过程,它将删除一些项目和 return 已删除项目的唯一标识符列表。

通过使用临时 table 我可以添加 select 我想删除的所有项目,将 ID 添加到临时 table,然后删除所有具有 ID 的项目在临时 table 然后 return 临时 table 中的所有 ID。

我想避免这样做,是否有更好的方法可以删除和 return 所有 ID 而无需临时 table,并且不需要多次调用数据库?

欢迎任何想法,如果有类似的post请指导我。 (我找不到)

下面是您想要实现的示例:

create table your_table 
(
    id int identity(1, 1) primary key, 
    value varchar(100)
);

insert into your_table (value) values
('hello'), ('from'), ('Mars'), ('!!!!');

create proc dbo.deleteByChar
(
    @char char(1)
) as
begin
    delete from your_table
    output deleted.id --> OUTPUT clause as @Vishal_Gajjar suggested
    where value like '%' + @char + '%';
end

用法:

select * from your_table;
exec dbo.deleteByChar 'o';
select * from your_table;

输出:

id  value
---------
1   hello
2   from
3   Mars
4   !!!!

id
--
1
2

id  value
---------
3   Mars
4   !!!!

如果您正在使用触发器,可以在 deleted 虚拟 table 中找到 id-s。请注意,在 UPDATE 的情况下,id-s 将再次存在于 deleted table 中。要检测 UPDATE 你可以加入 inserted table.