将 FOR XML 结果存储在 xml 变量中(使用 WITH 语句)

Dot*_*per 6 sql-server-2008 xml

我正在使用这样的 SQL 查询创建 xml:首先是 CTE,然后SELECT是创建 XML的语句。

那个有效。但是,我想将输出存储在 XML 变量中(如果更容易,表变量也可以)。但我似乎无法让它工作(见第二个片段)。有什么建议?

有效的 XML 生成:

;WITH cte
       AS (SELECT ...
          )
  SELECT ...
  FOR XML PATH ('root')
Run Code Online (Sandbox Code Playgroud)

这是我尝试将它存储在表变量中,但我无法让它工作:

DECLARE @myXml TABLE(
    x xml
);
;WITH cte
       AS (SELECT ...
          )
  INSERT INTO @myXml SELECT ...
  FOR XML PATH ('root')  
Run Code Online (Sandbox Code Playgroud)

这是由此产生的错误消息:

Meldung 6819, Ebene 16, Status 1, Zeile 240
Die FOR XML-Klausel ist in einer INSERT-Anweisung nicht zulässig。

(我不能在插入语句中使用 FOR XML。)

Mik*_*son 8

您将分配放在 CTE 声明之后。

declare @X xml;

with C as
(
  select 1 as X, 2 as Y
)
select @X = 
  (
  select *
  from C
  for xml path('root')
  );
Run Code Online (Sandbox Code Playgroud)

如果您希望 XML 以表变量结尾,则它看起来像这样。

declare @T table (X xml);

with C as
(
  select 1 as X, 2 as Y
)
insert into @T(X)
select (
       select *
       from C
       for xml path('root')
       );
Run Code Online (Sandbox Code Playgroud)