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

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

我需要创建一个存储过程,它接受一个 userId 和一个categoryIds 列表,并且 从特定表中删除任何匹配的行。

伪代码:

@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 中使用循环(无论如何这都不会起作用......) 有谁知道如何制作一个可以做到这一点的存储过程?

最佳答案

从@Categorylist中创建一个表变量

@Categorylist table (ID int)

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

关于SQL存储过程-删除与输入列表匹配的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16604254/

相关文章:

mysql - 删除匹配行的更快方法?

sql - PostgreSQL 查询不一致

sql - SQL查询-一列必须是不同的,受限列必须是最新的

sql - 使用 SQL Server 对多个键值对进行匹配/分组

sql-server-2008-r2 - 无法从 CTE 中删除 - MSG 4405

mysql - 从多个表中删除多行MYSQL

mysql - 使用 union 在 mysql 表中进行多个连接

sql - 更新排他锁转换

sql - 如何从另一个表中获取具有匹配ID的另一个表中的名称?

mysql - SQL 如果 A 列存在且等于 B 则从 all 中删除所有