我需要创建一个带有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中使用循环(不是说这会起作用......) 有谁知道如何制作一个可以做到这一点的存储过程?
答案 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
...