SQLShackでXMLフォームまたはXMLデータ型ドキュメントを生成する
この記事では、さまざまなT-SQLの方法を使用して、リレーショナルテーブルからXMLデータ型ドキュメントを作成する方法を説明します。 たとえば、データ移行の場合、SQL Serverデータベースからの情報は、別のフレームワークでXMLを使用してエクスポートおよびインポートできます。 XMLは、データを抽出、保存、操作する標準的な方法です。 XMLデータ型の操作の1つの側面は、SQL ServerのFOR XMLプロビジョニングを使用して行われるリレーショナル情報からXMLを作成することです:
SQL Serverでは、XMLデータ型を別の方法で使用できます。 この記事では、XMLの基本的な使用法をいくつか説明します。 FOR XMLキーワードは、クエリ結果に必要なフォームでXMLドキュメントを準備するために、SELECTクエリステートメントで追加できるプロビジョニングです。 結果は、FOR XMLの規定で決定されたさまざまなモードによって制御されるコンポーネントと品質を含むUnicode文字列です。
:
- RAW
- AUTO
- EXPLICIT
- PATH
以下の表は、さまざまな方法論をさらに明確にするためのサンプルデータを示しています:
自動モード
自動モードは、テーブルの行からXML要素に変換するアプローチの1つです。 SELECTクエリの列別名または列名に対応するXMLドキュメントの要素名。
たとえば、クエリ結果は、上記のサンプルデータの単一のXMLドキュメントで生成されています。 クエリ結果には結果セットに5行が含まれていましたが、これは孤立したセルの結果セットに変更されました。 この方法論は、単一の戻り変数で複数の行を返すために、単一値関数で使用されます。
1
2
3
|
XML自動の場合、user_details
からuser_id,fname,lname,email_
を選択します;
|
ここで、AUTOはテーブル名を使用してヘッダー名を生成します。
明示的なモード
以降のXMLのスタイルをより詳細に制御するために、SQL開発者は明示的なモードを使用できます。 EXPLICITモードでは、クエリ結果は、カスタマイズされたXMLラベルと値を持つ単一のXMLデータ型ドキュメントに変更されます。 明示的なモードでは、レコード内の行ごとに異なるラベルセットが作成されます。 さらに、明示モードでは、ユーザーがSQLクエリでXMLデータ型形式の要素の位置を設定するように、XML形式を設計できます。
以下は、明示的なモードの使用例です:
SQLクエリ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
タグとして1を選択し、親として
NULL、
user_idとして、
NULLとして、
NULLとして、
NULLとして、
NULLとして、
NULLとして、
NULLとして、
NULLとして、
NULLとして、
タグとして3を選択し、親として1を選択し、
user_idとして、
fnameとして、
lnameとして、
email_AS
email_AS
email_AS
email_AS
email_AS
email_AS
email_AS
email_AS
email_AS
email_AS
email_AS
email_AS
タグとして2を選択し、親として1を選択し、 user_idとして、
fnameとして、
lnameとして、
lnameとして、
lnameとして、
lnameとして、
lnameとして、
lnameとして、
lnameとして、
lnameとして、
lnameとして、
lnameとして、
lnameとして、
lnameとして、
email_as
from user_details
ORDER BY3,1
for xml explicit;
|
明示的なモードの結果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<ユーザー>
<fname fname=”Jo” />
<Lname lname=”ブラウン” />
</ユーザー>
<ユーザー>
<fname fname=”ケイティ” />
<lname lname=”McAskill-White” />
</ユーザー>
<ユーザー>
<fname fname=”Mihail” />
<lname lname=”Frintu” />
</ユーザー>
<ユーザー>
<fname fname=”ジミー” />
<lname lname=”ビショフ” />
</ユーザー>
<ユーザー>
<fname fname=”アラン” />
<lname lname=”ブリューワー” />
</ユーザー>
|
RAWモード
FOR XML内でXMLを作成するために開発者が最も一般的でよく使用するモードはRAWモードです。 基本的に、RAWモードはSELECTアーティキュレーションの各行の結果セットから”row”という名前の要素を出力し、行のセル値は要素の属性として制限されます。 RAWモードでは、すべての列はXML内の1つの要素として扱われ、それらの行の列は同じ要素に帰属します。 RAWモードは、結果セット内の各行をXMLコンポーネントに変更するために使用されます。
行モードの場合、出力が異なるさまざまなクエリモデルについては、以下の例で説明します。
例1
1
2
3
4
5
6
7
8
9
|
USER_id,fname,lname,email_
FROM user_details
FOR XML RAW
<row user_id=”1″fname=”Jo”lname=”Brown”email_=”[email protected](コムコム)” />
<行user_id=”2″fname=”Katie”lname=”McAskill-White”email_=”[email protected]” />
<行user_id=”3″fname=”Mihail”lname=”Frintu”email_=”[email protected]” />
<行user_id=”4″fname=”Jimmy”lname=”Bischoff”email_=”[email protected]” />
<行user_id=”5″fname=”Alan”lname=”Brewer”email_=”[email protected](コムコム)” />
|
RAWモードを使用すると、各要素のヘッダーはXML結果のrow要素として定義され、各行の列はXMLデータ型結果のrow要素内で属性付けされます。
2
1
2
3
4
5
6
7
8
9
10
11
|
XML RAW(‘user’)の場合、ROOT
<root
からuser_id,fname,lname,email_
を選択します>
<ユーザー user_id=”1″fname=”Jo”lname=”Brown”email_=”[email protected](コムコム)” />
<ユーザー user_id=”2″fname=”Katie”lname=”McAskill-White”email_=”[email protected]” />
<ユーザー user_id=”3″fname=”Mihail”lname=”Frintu”email_=”[email protected]” />
<ユーザー user_id=”4″fname=”Jimmy”lname=”Bischoff”email_=”[email protected]” />
<ユーザー user_id=”5″fname=”Alan”lname=”Brewer”email_=”[email protected](コムコム)” />
</根>
|
ユーザーが単一のタグにすべての要素を含めたい場合は、RAWモードのROOTオプションを使用し、XMLデータ型resultにRAW()で名前を追加することで、各要素のヘッダー名を
3
1
2
3
4
5
6
7
8
9
10
11
|
USER_id,fname,lname,email_
FROM user_details
FOR XML RAW(‘user’),ROOT(‘UserDetails’)
<UserDetails>
<ユーザー user_id=”1″fname=”Jo”lname=”Brown”email_=”[email protected](コムコム)” />
<ユーザー user_id=”2″fname=”Katie”lname=”McAskill-White”email_=”[email protected]” />
<ユーザー user_id=”3″fname=”Mihail”lname=”Frintu”email_=”[email protected]” />
<ユーザー user_id=”4″fname=”Jimmy”lname=”Bischoff”email_=”[email protected]” />
<ユーザー user_id=”5″fname=”Alan”lname=”Brewer”email_=”[email protected](コムコム)” />
</UserDetails>
|
XML RAWルートでは、ROOT()を使用してユーザー定義の名前でヘッダーを設計できます。 この例に見られるように、<root>要素は<UserDetails>
の例に置き換えられます4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
XML RAWの場合、要素
<行>
からuser_id、fname、lname、email_
を選択します。 <user_id>1</user_id>
<fname>Jo</fname>
<lname>ブラウン</lname>
<>[email protected]</>
</行>
<行>
<user_id>2</user_id>
<fname>Katie</fname>
<lname>McAskill-White</lname>
<>[email protected]</メール_>
</行>
|
RAWモードでELEMENTディレクティブを使用すると、ユーザーは行要素構造ベースのXMLを作成できます。 行の各セルは、行の親要素内のXML要素を<row>として抽出されています。 基本的には、上記のクエリでELEMENTSキーワードを使用して、列を出力XMLの要素として表示しました。
パスモード
フォーマットをより詳細に制御してXMLを作成するための最良のモードは、パスモードです。 パスを使用すると、ユーザーはより簡単な選択を作成し、列にXPATHアーティキュレーションを提供して一連のコマンドを割り当てることができます。 要素-属性チェーンを持つ適切なXMLデータ型ドキュメントを取得するには、サブクエリを持つFOR XMLパスを使用します:
1
2
3
4
5
6
7
8
9
10
11
|
USER_id,fname,lname,email_
FROM user_details
where email_=’[email protected]’
FOR XMLパス;
<行>
<user_id>3</user_id>
<fname>Mihail</fname>
<lname>Frintu</lname>
<>[email protected]</>
</行>
|
結論
サーバークエリの結果を使用して異なるXML形式を実現するのは簡単です。 クエリ結果は、SELECTステートメントの最後にFOR XMLキャッチフレーズを含めることによってXMLで抽出されます。 説明したように、XMLデータ型の属性またはXMLノードへの列を使用して結果を構造化または配置するための多くの選択肢があります。
- 投稿者
- 最近の投稿
Jignesh Raiyaniによるすべての投稿を表示します
- SQL Serverのページ平均余命(PLE)-2020年7月17日
- SQL Serverでテーブルパーティションを自動化する方法-2020年7月7日
- AWS EC2でのSql Server Always On Availability Groupsの設定-2020年7月17日
- 6, 2020