首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server: ISNULL标识符上的ISNULL

Server: ISNULL标识符上的ISNULL
EN

Stack Overflow用户
提问于 2015-08-28 23:04:48
回答 7查看 43.7K关注 0票数 12

我正在尝试比较col1子句中的列@myvar和变量@myvar。这两种方法通常都包含GUID,但也可能具有空值。我想我可以避开这样一个事实:NULL=NULL通过使用WHERE ISNULL(col1, '')=ISNULL(@myvar, '')来计算为FALSE。这将比较两个空字符串,并计算为TRUE。

然而,这将产生以下错误消息:

Msg 8169,级别16,状态2,第3行转换失败时,从字符串转换为unique标识符。

我试过了

代码语言:javascript
复制
DECLARE @myvar uniqueidentifier = NULL
SELECT ISNULL(@myvar,'') as col1

同样的错误信息。

两个问题:首先,我试图将一个unique标识符变量(尽管它有一个空值)转换为一个(空!)字符串,而不是相反,正如错误消息所暗示的那样。怎么回事?

第二,是否有更好的方法来表达我需要的WHERE子句,以便比较可能为NULL的unique标识符?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-08-28 23:11:07

因为传递给isnull的第一个参数不是文字,所以它将确定该调用的返回类型,在您的情况下是一个uniqueidentifier。第二个参数''不能转换为这种类型,因此出现了错误。

解决这一问题的一种方法就是显式地检查null

代码语言:javascript
复制
WHERE (@myvar IS NULL AND col1 IS NULL) OR (col1 = @myvar)
票数 13
EN

Stack Overflow用户

发布于 2017-03-16 07:19:04

我认为下面的表达式可以用来检查GUID列是否为空。

代码语言:javascript
复制
CAST(0x0 AS UNIQUEIDENTIFIER)

有些事像

代码语言:javascript
复制
...WHERE GuidId <>  CAST(0x0 AS UNIQUEIDENTIFIER)
票数 15
EN

Stack Overflow用户

发布于 2015-08-28 23:12:37

ISNULL不适用于您的原因是,替换值(如果check表达式真的为null)必须隐式转换为check表达式的类型。

您的WHERE子句可以使用col IS NULL AND @var IS NULL检查该状态。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32280994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档