如何解决存储过程在调用时从不删除行
在SQL Server 2012存储过程中,我具有以下代码行:
- 声明并设置一个名为
@galaxyID
的变量 - 然后使用该
@galaxyID
从名为galaxyObjects
的表中删除具有特定galaxyID
的所有行
我需要检查以确保@galaxy
不为null,因为有时表astroList
中的列为NULL。
我没有任何错误,但是什么也没有删除,我不确定为什么。
代码如下:
DECLARE @galaxyID UNIQUEIDENTIFIER
SET @galaxyID = (SELECT galaxyID FROM astroList WHERE astroID = @astroID)
DELETE FROM galaxyObjects
WHERE galaxyID = @galaxyID AND @galaxyID IS NOT NULL
解决方法
除非不可能 SET @var = (SELECT ...)
返回多行,否则您不能真的使用SELECT
。因此,任何查看此代码但不知道数据模型的人都将认为这是一个定时炸弹。 SQL Server中一个更安全的选择是将DELETE
与连接一起使用(该连接可用于任意数量的行,并且在没有匹配项时是无操作的):
DELETE go
FROM dbo.astroList AS al
INNER JOIN dbo.galaxyObjects AS go
ON al.galaxyID = go.galaxyID
WHERE al.astroID = @astroID;
这将忽略galaxyID
中astroList
为NULL的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。