Sql server 连接t-sql中的列,但排除空列

Sql server 连接t-sql中的列,但排除空列,sql-server,tsql,Sql Server,Tsql,所以我需要一个自定义字符串在每个列之前,如图所示。但是,例如,如果Column2为null,我希望排除整个部分“Column 2:”+t.Column2 Where子句仅显示NOTNULL列不是我想要的,因为对于某些行,所有3列都为null是有效的。假设已启用(默认情况下,应该是),您可以执行以下操作: SELECT 'Column 1: ' + t.Column1 + 'Column 2: ' + t.Column2 + 'Column 3: ' + t.Column3 from Tab

所以我需要一个自定义字符串在每个列之前,如图所示。但是,例如,如果Column2为null,我希望排除整个部分“Column 2:”+t.Column2

Where子句仅显示NOTNULL列不是我想要的,因为对于某些行,所有3列都为null是有效的。

假设已启用(默认情况下,应该是),您可以执行以下操作:

SELECT 'Column 1: ' + t.Column1 + 
'Column 2: ' + t.Column2 + 
'Column 3: ' + t.Column3 
from Table1 t
如果任何列为
NULL
,则
'column name'+column
将为
NULL
COALESCE
然后用空字符串替换
NULL
s,以便外部
+
s连接非NULL字符串。

假设已启用(默认情况下应该启用),您可以执行以下操作:

SELECT 'Column 1: ' + t.Column1 + 
'Column 2: ' + t.Column2 + 
'Column 3: ' + t.Column3 
from Table1 t

如果任何列为
NULL
,则
'column name'+column
将为
NULL
<代码>合并然后用空字符串替换
NULL
s,以便外部
+
s连接非空字符串。

在SQL Server中,将
NULL
连接到字符串将导致
NULL
。利用这一事实,您可以这样做:

SELECT COALESCE('Column 1: ' + t.Column1,'') + 
COALESCE('Column 2: ' + t.Column2,'') + 
COALESCE('Column 3: ' + t.Column3,'')
from Table1 t
在SQL Server 2012或更高版本中,您可以使用内置函数
Concat
,但仍需要以旧方式将列连接到硬编码的描述中,以利用前面描述的效果

SELECT ISNULL('Column 1: ' + t.Column1, '') + 
       ISNULL('Column 2: ' + t.Column2, '') + 
       ISNULL('Column 3: ' + t.Column3, '') 
FROM Table

在SQL Server中,将
null
连接到字符串将导致
null
。利用这一事实,您可以这样做:

SELECT COALESCE('Column 1: ' + t.Column1,'') + 
COALESCE('Column 2: ' + t.Column2,'') + 
COALESCE('Column 3: ' + t.Column3,'')
from Table1 t
在SQL Server 2012或更高版本中,您可以使用内置函数
Concat
,但仍需要以旧方式将列连接到硬编码的描述中,以利用前面描述的效果

SELECT ISNULL('Column 1: ' + t.Column1, '') + 
       ISNULL('Column 2: ' + t.Column2, '') + 
       ISNULL('Column 3: ' + t.Column3, '') 
FROM Table

我想补充一点,在SQL Server的未来版本中,
CONCAT\u NULL\u YIELDS\u NULL
是无润滑的,并且将始终设置为
ON
,直接添加到答案中,即使它在链接上有说明。我想补充一个事实,即
CONCAT\u NULL\u-NULL
是无润滑的,并且在SQL Server的未来版本中总是设置为
on
,即使它在链接上有说明。