无论Null值如何,TSQL都会获取数据

时间:2014-04-03 16:39:07

标签: sql sql-server tsql

我有一个存储过程,它从我的employee表中获取信息并返回数据。

使用了3列:

 B.[SiloDesc] + ' (' + B.[TitleDesc] + ') ' + B.[SkillSetDesc] as SkillSetDesc,

我的问题是,如果其中一个恰好是null,它就不会显示任何数据。无论其中一个字段是否为空,包含数据的最佳方法是什么。

2 个答案:

答案 0 :(得分:2)

  isnull(B.[SiloDesc], '') 
  + ' (' + isnull(B.[TitleDesc], '') + ') ' 
  + isnull(B.[SkillSetDesc], '') as SkillSetDesc,

答案 1 :(得分:2)

您可以为每个列使用coalesce()isnull() ...或者您可以简单地使用...

  

CONCAT ( string_value1, string_value2 [, string_valueN ] )

     
    

采用可变数量的字符串参数并将它们连接成一个字符串。它至少需要两个输入值;否则,会引发错误。所有参数都隐式转换为字符串类型,然后连接。 空值隐式转换为空字符串。

  

A。: TitleDescnull时删除括号:

select concat(B.[SiloDesc], ' (' + B.[TitleDesc] + ')', ' ' + B.[SkillSetDesc])

由于在sql中处理null的方式,表达式' (' + null + ')'会导致null concat()将其视为空字符串...有点好,因为如果值为null,它会有效地删除括号。

B。:保留括号,无论如何:

select concat(B.[SiloDesc], ' (', B.[TitleDesc], ') ', B.[SkillSetDesc])

样品:

select concat('john', ' (' + null + ')', ' adams') -- john adams
select concat('john', ' (test)', ' ' + null) -- john (test)
select concat('john', ' (the man)', ' adams') -- john (the man) adams