我不确定这是不可能的,还是我无法找到解决方案。
我正在尝试编写一个SQL存储过程,该过程将删除许多项并返回已删除项的唯一标识符列表。
通过使用临时表,我可以添加select我要删除的所有项,将id添加到临时表,然后删除临时表中具有id的所有项,然后返回临时表中的所有id。
我想避免这样做,是否有更好的方法可以删除并返回所有id而无需临时表,并且不会多次调用db?
欢迎任何想法,如果有类似的帖子,请指导我。 (我找不到一个)
答案 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
表。