【发布时间】:2016-02-02 08:34:38
【问题描述】:
在连接 SQL Server 中的行时,FOR XML PATH ('') 子句如何工作?
我只想解释一下FOR XML PATH ('') 子句的工作原理...
【问题讨论】:
-
这是一种滥用。正如它的名字所暗示的,这个特性的目的是生成XML。碰巧的是,某些特征组合意味着它可以用来连接字符串。
-
@Damien_The_Unbeliever 在 SQL Server 中有没有更好的方法?即更简洁,性能更好?
-
“有没有更好的方法” - 是的 - “在 SQL Server 中” - 不是真的。这是字符串操作,通常最好使用具有强大字符串操作功能的语言来完成。 T-SQL 不是其中之一。所以如果可能的话,把这个格式化/表示逻辑移出数据库。
-
@Damien_The_Unbeliever T-SQL 可以做到,但仅限于 Sybase SQL Anywhere (
LIST())。事实上,许多(如果不是大多数)SQL 实现都可以做到这一点。 MySQL (group_concat())、Oracle (listagg())、PostgreSQL (string_agg())、DB2 (listagg()) SQLite (group_concat()) 和 Firebird (LIST()) 的最新版本。在 Postgres、Oracle 和我相信 DB2 中,这些函数也是分析函数,因此它们支持窗口化。虽然我同意它应该由应用程序在显示中处理,但报告创作软件在这方面通常非常不灵活。 -
@MartinSmith 哦,快!我没有看到。我对 SQL Server 最大的不满之一终于得到了解决。当 2016 年仅包含
string_split和string_escape时,我感到非常恼火。现在我只需要等到我们迁移到 SQL Server 2017,这有望在 2050 年之前的某个时间。
标签: sql-server tsql for-xml-path