EXPLICIT模式
适用于 ❌ 开源版 ✅ Express 版 ✅ 专业版 ✅ 企业版
EXPLICIT 模式基于关于如何嵌套内容的“显式”指令生成 XML 内容,因此在 SQL Server 的语法中提供了最大的灵活性,即使语法的作者也不得不经常查阅它。
考虑以下查询
SELECT 1 [Tag], null [Parent], book.id [Book!1!BookID] FROM book ORDER BY id FOR XML PATH
create.select(
inline(1).as("Tag"),
inline((Integer) null).as("Parent"),
BOOK.ID.as("Book!1!BookID"))
.from(BOOK)
.orderBy(BOOK.ID)
.forXML().explicit()
.fetch();
此查询会生成如下文档片段
<Book BookID="1"/> <Book BookID="2"/> <Book BookID="3"/> <Book BookID="4"/>
方言支持
此示例使用 jOOQ
select(
inline(1).as("Tag"),
inline((Integer) null).as("Parent"),
BOOK.ID.as("Book!1!BookID"))
.from(BOOK)
.orderBy(BOOK.ID)
.forXML().path()
翻译成以下特定方言的表达式
DB2, Oracle
SELECT xmlagg(xmlelement(
NAME row,
xmlelement(NAME Tag, Tag),
xmlelement(NAME Parent, Parent),
xmlelement(NAME Book!1!BookID, Book!1!BookID)
))
FROM (
SELECT
1 Tag,
NULL Parent,
BOOK.ID Book!1!BookID
FROM BOOK
ORDER BY BOOK.ID
) t
Postgres
SELECT xmlagg(xmlelement(
NAME row,
xmlelement(NAME Tag, Tag),
xmlelement(NAME Parent, Parent),
xmlelement(NAME Book!1!BookID, Book!1!BookID)
))
FROM (
SELECT
1 Tag,
CAST(NULL AS int) Parent,
BOOK.ID Book!1!BookID
FROM BOOK
ORDER BY BOOK.ID
) t
SQLServer
SELECT (
SELECT
1 Tag,
NULL Parent,
BOOK.ID Book!1!BookID
FROM BOOK
ORDER BY BOOK.ID
FOR XML PATH
)
Teradata
SELECT xmlagg(xmlelement(
NAME row,
xmlelement(NAME Tag, Tag),
xmlelement(NAME Parent, Parent),
xmlelement(NAME Book!1!BookID, Book!1!BookID)
))
FROM (
SELECT *
FROM (
SELECT TOP 999999999999999999
1 Tag,
NULL Parent,
BOOK.ID Book!1!BookID
FROM BOOK
ORDER BY BOOK.ID
) x
) t
ASE, Access, Aurora MySQL, Aurora Postgres, BigQuery, ClickHouse, CockroachDB, Databricks, Derby, DuckDB, Exasol, Firebird, H2, HSQLDB, Hana, Informix, MariaDB, MemSQL, MySQL, Redshift, SQLDataWarehouse, SQLite, Snowflake, Sybase, Trino, Vertica, YugabyteDB
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听到它!