Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 文本字段为空时的SQL情况无效_Sql Server_Null_Conditional_Case - Fatal编程技术网

Sql server 文本字段为空时的SQL情况无效

Sql server 文本字段为空时的SQL情况无效,sql-server,null,conditional,case,Sql Server,Null,Conditional,Case,我尝试在SQL中运行以下case语句: CASE WHEN P.Photos_Cloned_From IS NULL THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg' ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg' END A

我尝试在SQL中运行以下case语句:

CASE 
    WHEN P.Photos_Cloned_From IS NULL
        THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg'
        ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg'
    END AS image_link,
这些语句有效,但仅适用于那些不为NULL的记录。对于NULL项,该语句不返回THEN条件


有什么建议吗?

试试这个,让我们知道会发生什么

'http://www.toolboxbarn.com/v/vspfiles/photos/'+
    COALESCE(P.Photos_Cloned_From,P.ProductCode,'DEFAULT')+'-2T.jpg'
AS image_link,

在这里使用coalesce比case语句更好。一些平台可以优化coalesce,让您轻松地设置默认值。

试试这个,让我们知道会发生什么

'http://www.toolboxbarn.com/v/vspfiles/photos/'+
    COALESCE(P.Photos_Cloned_From,P.ProductCode,'DEFAULT')+'-2T.jpg'
AS image_link,

在这里使用coalesce比case语句更好。有些平台可以优化coalesce,它可以让您轻松地创建默认值。

@hogan的建议对于保存代码来说是一个很好的建议,但如果您不引入他的新“默认”案例,它最终应该具有与您的案例陈述相同的结果。
ProductCode
很可能也是
NULL
这是可能的吗

为什么
string+NULL=NULL
因为NULL在sql中是未知的,所以大多数数据库平台在聚合或连接NULL时会将整个值置零

因此,请考虑以下测试用例:

Id   ProductCode    Photos_Cloned_From
1    1               ClonedFrom
2    2               Null
3    NULL            Null
您的案例表达和Hogan建议的结果是:

1) 否则“

2) 当“


3) WHEN NULL

@hogan的建议是保存代码的好方法,但如果不引入新的“default”case,它最终应该与您的case语句具有相同的结果。
ProductCode
很可能也是
NULL
这是可能的吗

为什么
string+NULL=NULL
因为NULL在sql中是未知的,所以大多数数据库平台在聚合或连接NULL时会将整个值置零

因此,请考虑以下测试用例:

Id   ProductCode    Photos_Cloned_From
1    1               ClonedFrom
2    2               Null
3    NULL            Null
您的案例表达和Hogan建议的结果是:

1) 否则“

2) 当“


3) 当NULL时

当您说“不返回THEN条件”时,您的意思是记录中返回的值不正确,还是完全丢失?请用您使用的数据库标记您的问题。可能不是NULL,而是一个空字符串?Matt、Hogan和Mansoor。非常感谢你的帮助。我想出来了。没有代码问题。我的用户告诉我所有的记录都完成了……但当我开始分析数据库时,这是不正确的。使用原始代码,现在一切都正常了……但我确实从你们每个人身上学到了一些东西。再次感谢!!当你说“不返回THEN条件”时,你的意思是记录中返回的值不正确,还是完全丢失了?请用你正在使用的数据库标记你的问题。可能它不是null,只是一个空字符串?Matt、Hogan和Mansoor。非常感谢你的帮助。我想出来了。没有代码问题。我的用户告诉我所有的记录都完成了……但当我开始分析数据库时,这是不正确的。使用原始代码,现在一切都正常了……但我确实从你们每个人身上学到了一些东西。再次感谢!!我喜欢这个建议,但最终它应该是相同的结果时,空的情况下,然后。。。其他的与COALESCE(THEN,ELSE)相同@Matt-no我在第二个选项后有一个默认值,因此这将修复“均为null”OP的代码有问题,我相信我们都认为这是问题所在。true没有考虑您的“默认”,因为这会给OP添加一个新的案例,这可能是需要的,也可能不是需要的,但正如您所说,将消除空值,这可能是问题的原因。我喜欢这个建议,但最终结果应该和空的情况相同,然后。。。其他的与COALESCE(THEN,ELSE)相同@Matt-no我在第二个选项后有一个默认值,因此这将修复“均为null”OP的代码有问题,我相信我们都认为这是问题所在。true没有考虑您的“默认”,因为这会给OP添加一个新的案例,这可能是需要的,也可能不是需要的,但正如您所说,将消除空值,这可能是问题的原因。请再次查看我的答案,我没有失败的空值,空格。@Hogan true我做了,我只是快速阅读,我确实更新了我的答案,说明如果新的“默认值”未包含,结果将是相同的。请再次查看我的答案,我没有通过空格,空格。@Hogan true我做了,我只是快速阅读,我确实更新了我的答案,说明如果新的案例“默认”未包括在内,结果将是相同的