我正在尝试为删除编写一个存储过程。但为了性能,我们更改了删除 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, ... );
一种方法是使用 Table 类型参数,以及JOIN
. Assuming ENTRY_ID
is an 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)