【发布时间】:2015-07-02 21:58:00
【问题描述】:
我有一个返回列表的存储过程。变量 IS2000PolicyNo 可以从 tblQuote 获得 Null 结果。 这是一个简化的 sn-p,仅显示导致问题的变量。
@IS2000PolicyNo int,
IF @IS2000PolicyNo = -1
SET @IS2000PolicyNo = NULL
BEGIN TRY
SELECT
List= replace( ( SELECT top 500
cast(ISNULL(T.IS2000PolicyNo,'') as varchar) + ';'
FROM
(SELECT DISTINCT
Q.IS2000PolicyNo
FROM
dbo.tblQuote Q
WHERE
cast(isnull(Q.IS2000PolicyNo,'')as varchar) LIKE '%'+ CAST(ISNULL(@IS2000PolicyNo,'')as varchar) + '%' )
我执行传递-1的过程,IF语句将其转换为null,这应该返回所有记录,但它跳过了IS2000PolicyNo为null值的记录。 当我在 Where 语句中硬编码以使 @IS2000PolicyNo 等于 null 时,它会返回包括 null 在内的所有记录。
WHERE
cast(isnull(Q.IS2000PolicyNo,'')as varchar) LIKE '%'+ CAST(ISNULL(null,'')as varchar + '%')
我也试过只设置@IS2000PolicyNo = null 而不是 If 语句,它不返回空值。
我已经单步执行了代码,它正确地将 If 语句中的字段转换为空白。
谢谢!
【问题讨论】:
-
看起来像 SQL Server?请标记使用的产品(这样您就可以得到最大的关注!)
-
你能把你的问题缩小到唯一的问题区域吗?对于 NULL,我们使用 IS NULL,我不确定您是否正在使用它。顺便提一下。
-
"我在 where 语句中硬编码了 'null'" 等等,你的意思是你使用了
'%'+ CAST(ISNULL(NULL,'')as varchar) + '%'还是你使用了'%'+ CAST(ISNULL('NULL','')as varchar) + '%'?
标签: sql sql-server select null