bas*_*ash 2 sql sql-server stored-procedures
我正在尝试为删除编写存储过程。但是为了提高性能,我们已将delete sql查询更改为使用IN操作。我要编写接受逗号分隔ID的过程。
我尝试编写一个接受单个条目ID的过程。步骤如下。
CREATE PROCEDURE DeleteListEntry
@entryid int
AS
DELETE FROM LIST_ITEMS
WHERE ENTRY_ID = @entryid;
go
Run Code Online (Sandbox Code Playgroud)
我想知道如何将上述过程转换为接受批量输入。它的SQL查询如下-
DELETE FROM LIST_ITEMS WHERE ENTRY_ID IN (id1, id2, id2, ... );
Run Code Online (Sandbox Code Playgroud)
一种方法是使用Table类型参数,而使用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;
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过以下方式调用SP:
DECLARE @Entries dbo.EntryList;
INSERT INTO @Entries
VALUES(1),(2),(3);
EXEC dbo.DeleteListEntry @Entries;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |