SQL存储过程 - 删除与输入列表匹配的每一行

时间:2013-05-17 08:02:10

标签: sql sql-server-2008-r2 sql-delete

我需要创建一个带有userId和categoryId列表的存储过程 从特定表中删除任何匹配的行。

伪代码:

@categorylist int[]
@userId int

foreach(category as c in @categorylist)
{
DELETE FROM HelpWith as h
WHERE c.categoryId = h.categoryId
AND h.userId = @userId
}

现在我知道你不应该在SQL中使用循环(不是说这会起作用......) 有谁知道如何制作一个可以做到这一点的存储过程?

2 个答案:

答案 0 :(得分:4)

从@Categorylist

中创建一个表变量
@Categorylist table (ID int)

DELETE FROM HelpWith 
WHERE categoryId IN (SELECT ID FROM @Categorylist)
AND userId = @userId

答案 1 :(得分:3)

对于SQL Server和版本2008+,您可以使用Table Valued Parameters

CREATE TYPE Categorylist AS TABLE (ID int);
GO

CREATE PROCEDURE DoStuff
   @userId int,
   @list Categorylist READONLY
AS
...
DELETE FROM HelpWith 
      WHERE categoryId IN (SELECT ID FROM @list)
      AND userId = @userId
...