我试图在WHERE子句中比较列col1和变量@myvar.两者通常都包含GUID,但也可能包含NULL值.
我以为我可以通过使用WHERE ISNULL(col1,”)= ISNULL(@myvar,”)来解决NULL = NULL计算为FALSE的事实.这将比较两个空字符串,并评估为TRUE.
我以为我可以通过使用WHERE ISNULL(col1,”)= ISNULL(@myvar,”)来解决NULL = NULL计算为FALSE的事实.这将比较两个空字符串,并评估为TRUE.
但是,这将产生以下错误消息:
Msg 8169,Level 16,State 2,Line 3 Conversion Failed when converting
from a character string to uniqueidentifier.
我试过了
DECLARE @myvar uniqueidentifier = NULL SELECT ISNULL(@myvar,'') as col1
相同的错误消息.
两个问题:
首先,我试图将uniqueidentifier变量 – 即使它具有NULL值 – 转换为(空!)字符串,而不是相反,如错误消息所示.是什么赋予了?
第二,有没有更好的方法来说明我需要的WHERE子句,以允许比较可能为NULL的uniqueidentifier?
解决方法
@H_404_24@ 由于您传递的第一个参数isnull不是文字null,它将确定该调用的返回类型,在您的情况下是唯一标识符.第二个参数”,不能转换为这种类型,因此你得到的错误.WHERE (@myvar IS NULL AND col1 IS NULL) OR (col1 = @myvar)