【问题标题】:How to return blank or null record when using STUFF and XML PATH on SQL Server 2016?在 SQL Server 2016 上使用 STUFF 和 XML PATH 时如何返回空白或空记录?
【发布时间】:2021-04-20 17:01:32
【问题描述】:

我正在使用 STUFF 和 XML PATH,因为我必须使用 SQL Server 2016。我一直在处理此查询,但我无法弄清楚在使用 STUFF 和 XML PATH 时如何返回空记录或空白记录。下面是查询的sn-p。

SELECT 
    Names = STUFF((SELECT '; ' + CONCAT(t3.FirstName, ' ', t3.LastName)
                   FROM table1 t1
                   LEFT JOIN table2 t2 ON t0.columnID = t2.columnID
                   LEFT JOIN table3 t3 ON t3.columnID = t3.columnID
                   FOR XML PATH('')), 1, 1,''),

问题是当没有姓/名时,此查询返回分隔符'; ;'但如果没有姓/名,我需要它返回空白值。

【问题讨论】:

  • 请提供样本数据和期望的结果。你想要完成的事情还不清楚。
  • 只使用CASE 所以而不是SELECT '; ' + CONCAT(t3.FirstName, ' ', t3.LastName)SELECT CASE WHEN ISNULL(t3.FirstName, '') = '' AND ISNULL(t3.LastName, '') = '' THEN '' ELSE '; ' + CONCAT(t3.FirstName, ' ', t3.LastName) END
  • '; ;'?所以你正在使用SET CONCAT_NULL_YIELDS_NULL OFF?请注意,OFF 设置已被弃用,并且已经存在多年,并且将在 SQL Server 的未来版本中被有效删除。考虑切换使用ISNULLNULLIF 构造的代码。

标签: sql sql-server sql-server-2016 for-xml-path stuff


【解决方案1】:

只需添加一个WHERE

WHERE t3.FirstName IS NOT NULL OR t3.LastName IS NOT NULL

在这种情况下,您可能还想处理其中一个为 null 并获得额外空间:

SELECT '; ' + CASE
    WHEN t3.FirstName IS NOT NULL AND t3.LastName IS NULL THEN t3.FirstName
    WHEN t3.LastName IS NOT NULL AND t3.FirstName IS NULL THEN t3.LastName
    ELSE CONCAT(t3.FirstName, ' ', t3.LastName) END

另外,由于您的分隔符是两个字符长,您需要更改STUFF 参数:
FOR XML PATH('')), 1, 2,'')

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2023-03-30
    • 2019-03-03
    相关资源
    最近更新 更多