次のようにテーブルを作成しています。
CREATE TABLE dbo.Test
(
A int,
B int
)
GO
INSERT INTO Test VALUES (1, 11)
GO
INSERT INTO Test VALUES (5, 55)
GO
INSERT INTO Test VALUES (4, 44)
GO
これを次のように XML に変換するクエリがあります。
SELECT A,B
FROM Test
ORDER BY A
FOR XML AUTO, ROOT ('myroot'), ELEMENTS
次の結果を得るには、上記のクエリをサブクエリとして使用する必要があります。
A B
1 11
4 44
5 55
私はこのようなクエリを試みていますが、エラーが発生します:
SELECT Z.Value('@A', 'INT'),
Z.Value('@B', 'INT')
FROM (SELECT A, B
FROM Test
ORDER BY A
FOR XML AUTO,Elements, ROOT ('myroot')) Doc(Z)
メッセージ 4121、レベル 16、状態 1、行 1 列 "Z"、ユーザー定義関数または集計 "Z.Value" が見つからないか、> の名前があいまいです。
以下のような単純なクエリを記述して結果を取得できますが、要件は、それを XMl に変換してから、サブクエリを使用して同じ結果を取得することです。
Select * from test order by A
For XML によって返されたレコードをテーブル変数に挿入し、クロス適用を使用して結果を取得できることはわかっていますが、上記のように、一時テーブルや一時変数を使用せずに単一のクエリでこれを実行しようとしています。