web-dev-qa-db-ja.com

FOR XMLの結果をXML変数に保存(WITHステートメントを使用)

私は次のように機能するSQLクエリを使用してxmlを作成しています。最初にCTE、次にXMLを作成するSELECTステートメント。

うまくいきます。ただし、出力をXML変数に格納したいと思います(テーブル変数もそれが簡単であれば問題ありません)。しかし、私はそれを機能させることができないようです(2番目のスニペットを参照)。助言がありますか?

機能するXML生成:

;WITH cte
       AS (SELECT ...
          )
  SELECT ...
  FOR XML PATH ('root')

これはテーブル変数に格納するための私の試みでしたが、機能させることができませんでした。

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

これは、結果のエラーメッセージです。

Meldung 6819、Ebene 16、Status 1、Zeile 240
Die FOR XML-Klausel ise in einer INSERT-Anweisung nichtzulässig。

(挿入ステートメントでFOR XMLを使用できません。)

5
DotNetDeveloper

CTE宣言の後に割り当てを置きます。

declare @X xml;

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

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')
       );
7
Mikael Eriksson