TVo*_*ogt 9 sql sql-server null isnull uniqueidentifier
我试图比较一个子句中的列col1和变量.两者通常都包含GUID,但也可能具有NULL值.我以为我可以通过使用来解决评估为FALSE 的事实.这将比较两个空字符串,并评估为TRUE.@myvarWHERENULL=NULLWHERE ISNULL(col1, '')=ISNULL(@myvar, '')
但是,这将产生以下错误消息:
消息8169,级别16,状态2,行3转换从字符串转换为uniqueidentifier时失败.
我试过了
DECLARE @myvar uniqueidentifier = NULL
SELECT ISNULL(@myvar,'') as col1
相同的错误消息.
两个问题:首先,我试图将uniqueidentifier变量 - 即使它具有NULL值 - 转换为(空!)字符串,而不是相反,如错误消息所示.是什么赋予了?
第二,有没有更好的方法来说明我需要的WHERE子句,以允许比较可能为NULL的uniqueidentifier?
Mur*_*nik 10
由于您传递的第一个参数isnull不是文字null,因此它将确定该调用的返回类型,uniqueidentifier在您的情况下为a.第二个参数,''不能转换为这种类型,因此你得到的错误.
解决这个问题的一种方法就是明确检查nulls:
WHERE (@myvar IS NULL AND col1 IS NULL) OR (col1 = @myvar)
我认为下面的表达式可用于检查GUID列是否为空
CAST(0x0 AS UNIQUEIDENTIFIER)
就像是
...WHERE GuidId <>  CAST(0x0 AS UNIQUEIDENTIFIER)
| 归档时间: | 
 | 
| 查看次数: | 21547 次 | 
| 最近记录: |