【问题标题】:Returning a list of ids of deleted items返回已删除项目的 id 列表
【发布时间】:2015-01-07 14:45:37
【问题描述】:

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

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

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

我想避免这样做,有没有更好的方法可以删除并返回所有 id 而不需要临时表,并且不多次调用数据库?

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

【问题讨论】:

标签: sql-server


【解决方案1】:

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

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

【讨论】:

  • 这很好,但还有第二张桌子,没有办法避免吗?
  • 如果你使用“output deleted.id”而不是“output deleted.id into @deleted_ids”会怎样
  • @Vishal Gajjar 你完全正确 - 已实施!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2017-07-10
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多