sql - 如何编写存储过程来接受集合以使用 IN 操作删除行?

标签 sql sql-server stored-procedures

<分区>

我正在尝试为删除编写一个存储过程。但为了提高性能,我们已将删除 sql 查询更改为使用 IN 操作。我想编写接受逗号分隔 ID 的程序。

我尝试编写一个接受单个条目 ID 的过程。程序如下。

CREATE PROCEDURE DeleteListEntry
        @entryid int

AS

DELETE FROM  LIST_ITEMS
 WHERE ENTRY_ID = @entryid;
go

我想知道如何将上述程序转换为接受批量输入。它的 sql 查询如下 -

DELETE FROM LIST_ITEMS WHERE ENTRY_ID IN (id1, id2, id2, ... );

最佳答案

一种方法是使用表类型参数和JOIN假设 ENTRY_ID 是一个int:

CREATE TYPE dbo.EntryList AS TABLE (Entry_ID int NOT NULL);
GO

CREATE PROC dbo.DeleteListEntry @Entries dbo.EntryList READONLY AS
BEGIN

    DELETE LI
    FROM LIST_ITEMS LI
         JOIN @Entries E ON LI.ENTRY_ID = E.Entry_ID ;
END;

然后您可以通过以下方式调用 SP:

DECLARE @Entries dbo.EntryList;
INSERT INTO @Entries
VALUES(1),(2),(3);

EXEC dbo.DeleteListEntry @Entries;

关于sql - 如何编写存储过程来接受集合以使用 IN 操作删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56131998/

相关文章:

sql - 如何根据时间戳连接两个表(有几秒的差异)?

sql - 如何批量插入两个表,一个人的id是另一个人的外键?

MySql 在存储过程中循环

mysql - 我的mysql程序出了什么问题?

sql - 如果不存在行,如何让 SQL Server 返回默认值 0?

postgresql - 如何将 NEW/OLD 传递给从 PostgreSQL 中的触发器函数调用的过程?

MySQL语法错误: unexpected 'unique'

sql - 在 SQL Server 中截断(非舍入)小数位

c# - 数据库删除后 SQL Server 2008 关闭连接

SQL添加带有检查的外键约束