下面是一个存储过程,用于根据单独检查所有字段来检查数据库中是否存在重复条目(不要问为什么我应该这样做,它只需要这样).
听起来非常简单,但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))