返回已删除项目的ID列表

时间:2015-01-07 14:45:37

标签: sql-server

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

我正在尝试编写一个SQL存储过程,该过程将删除许多项并返回已删除项的唯一标识符列表。

通过使用临时表,我可以添加select我要删除的所有项,将id添加到临时表,然后删除临时表中具有id的所有项,然后返回临时表中的所有id。

我想避免这样做,是否有更好的方法可以删除并返回所有id而无需临时表,并且不会多次调用db?

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

2 个答案:

答案 0 :(得分:3)

下面是您要实现的目标示例:

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   !!!!

答案 1 :(得分:0)

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