当@RadioServiceGroup设置为NULL时,我想返回sbi_l_radioservicecodes表中包含大约120条记录的所有记录。但是,当我执行以下过程并将@RadioServiceGroup设置为NULL时,它不返回任何记录。这是存储过程:
CREATE PROCEDURE [dbo].[GetRadioServiceCodes]
@RadioServiceGroup nvarchar(1000) = NULL
AS
BEGIN
IF(@RadioServiceGroup = NULL)
BEGIN
SELECT rsc.RadioService
FROM sbi_l_radioservicecodes rsc
END
ELSE
BEGIN
SELECT rsc.RadioService
FROM sbi_l_radioservicecodes rsc
WHERE rsc.RadioServiceGroup = @RadioServiceGroup
END
END
答案 0 :(得分:13)
尝试“IS NULL”而不是“= NULL”
答案 1 :(得分:3)
好奇,它只是一个语法上的原因,为什么=不能在nvarchar上使用NULL
有些人说NULL = NULL的计算结果为false。这是错的。 NULL = NULL计算结果为NULL。
结果(NULL)不为真,因此运行ELSE条件。
另请参阅:ThreeValuedLogic on Wikipedia
您应该注意的另一个影响 - 连接:NULL + @SomeVar计算为NULL。这可能会意外地消除计算字符串。
答案 2 :(得分:1)
您可以完全删除If
。试试这个:
CREATE PROCEDURE [dbo].[GetRadioServiceCodes]
@RadioServiceGroup nvarchar(1000) = NULL
AS
BEGIN
SELECT rsc.RadioService
FROM sbi_l_radioservicecodes rsc
WHERE
rsc.RadioServiceGroup = @RadioServiceGroup
OR @RadioServiceGroup IS NULL
END
如果where子句变得更复杂,请确保添加任何必要的括号以对它们进行分组。
答案 3 :(得分:1)
使用“IS NULL”而不是“= NULL”
或者,要使“= NULL”工作,您可以在“CREATE PROCEDURE”之前写入“SET ANSI_NULLS OFF”。