T-SQL存储过程NULL输入值导致select语句失败

前端之家收集整理的这篇文章主要介绍了T-SQL存储过程NULL输入值导致select语句失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
下面是一个存储过程,用于根据单独检查所有字段来检查数据库中是否存在重复条目(不要问为什么我应该这样做,它只需要这样).

听起来非常简单,但SP失败了.
问题是传递给SP的一些参数可能具有空值,因此sql应该读为“is null”而不是“= null”.
我已尝试使用exec()和sp_executesql的isnull(),case语句,coalesce()和动态sql,但未能实现其中任何一个.这是代码……

CREATE PROCEDURE sp_myDuplicateCheck
 @userId int,@noteType char(1),@aCode char(3),@bCode char(3),@cCode char(3),@outDuplicateFound int OUT
AS
BEGIN
SET @outDuplicateFound = (SELECT Top 1 id FROM codeTable 
                          WHERE userId = @userId
                          AND noteType = @noteType
                          AND aCode = @aCode
                          AND bCode = @bCode
                          AND cCode = @cCode 
                          )
-- Now set the duplicate output flag to a 1 or a 0
IF (@outDuplicateFound IS NULL) OR (@outDuplicateFound = '') OR (@outDuplicateFound = 0)
 SET @outDuplicateFound = 0
ELSE 
 SET @outDuplicateFound = 1
END

解决方法

对于每个可能为null的参数,我认为你需要这样的东西:
AND (aCode = @aCode OR (aCode IS NULL AND @aCode IS NULL))
原文链接:https://www.f2er.com/mssql/76549.html

猜你在找的MsSQL相关文章