可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17

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

引用此页

反馈

您对此页面有任何反馈吗? 我们很乐意听到它!

The jOOQ Logo