我正在尝试为删除编写一个存储过程。但为了提高性能,我们已将删除 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;