1 回答

TA贡献1770条经验 获得超3个赞
你想要or,而不是and- 否则你会搜索CardIndex同时具有所有三个值的行,这显然永远不会发生:
DELETE FROM CardData
WHERE
UserIndex = @UserIndex
AND (CardIndex = 1 OR CardIndex = 2 OR CardIndex = 3)
这可以缩短为IN:
DELETE FROM CardData
WHERE UserIndex = @UserIndex AND CardIndex IN (1, 2, 3)
SELECT请注意,在删除值之前没有意义。您可以直接触发DELETE:如果没有行符合条件,则不会发生实际删除。
最后:不要在查询字符串中连接变量;这是低效的,并且会将您的代码暴露给 SQL 注入。相反,您应该使用参数化查询(有大量在线资源可以解释如何做到这一点)。
编辑
cardIndex仅当给定的所有三个值都可用时,您才想删除所有三个记录userIndex。假设没有重复项(userIndex, cardIndex),一种方法是可更新的 CTE:
with cte as (
select count(*) over() cnt
from cardData
where userIndex = @UserIndex and cardIndex in (1, 2, 3)
)
delete from cte where cnt = 3
- 1 回答
- 0 关注
- 184 浏览
添加回答
举报