我正在尝试比较 WHERE
子句中的列 col1
和变量 @myvar
。两者通常都包含 GUID,但也可能包含 NULL 值。
我认为我可以通过使用 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 的唯一标识符?
最佳答案
我认为下面的表达式可用于检查 GUID 列是否为空
CAST(0x0 AS UNIQUEIDENTIFIER)
类似的东西
...WHERE GuidId <> CAST(0x0 AS UNIQUEIDENTIFIER)
关于SQL Server : ISNULL on uniqueidentifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32280994/