我正在尝试在我拥有的存储过程中实现可选参数,但我遇到了问题.这是一个简化的查询来说明问题:
SET ANSI_NULLS OFF
DECLARE @MiddleName VARCHAR(20);
SET @MiddleName = NULL;
SELECT * FROM [Customer]
WHERE [LastName] = 'Torres'
AND [MiddleName] = COALESCE(@MiddleName, [MiddleName])
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,我需要返回一行,因为一个Torres在[MiddleName]列中有NULL.但查询返回零行.使用IFNULL()产生相同的结果.通过研究COALESCE,我的印象是如果所有表达式都为NULL,则返回NULL.由于我不是SQL专家,我认为我错过了什么,但它是什么......
在此先感谢您的帮助.
Dav*_*vid 16
问题是在sql中,"WHERE Null = Null"永远不会返回任何行,因为Null不等于它自己.
你必须做
SELECT * FROM [Customer]
WHERE [LastName] = 'Torres'
AND ( @MiddleName IS NULL OR [MiddleName] = @MiddleName )
Run Code Online (Sandbox Code Playgroud)