SQL ServerのXML出力

I.概要

一連の行として、SELECTクエリの結果が返されます。取得するために、XMLクエリとして公式結果にSQLクエリでFOR XMLの句を指定します。XML句の最上位レベルのクエリとサブクエリで使用することができます。XML句FORトップは唯一のSELECT文で使用することができます。サブクエリでは、XML FOR INSERT、UPDATEで使用される、およびDELETEステートメントをすることができます。また、代入文で使用することができます。
  FOR XMLの節では、次のいずれかのモードを指定します。

  • AUTO
  • EXPLICIT
  • パス

第二に、テストデータ

テーブルを構築する:のTestTable、以下の表のデータ:

 

 

第三に、例

図1は、XML RAW FOR
  RAWモードは、行毎に設定<行>要素を生成するために行SELECT文が返されます。あなたは書くことによってXMLクエリのネストされたのXML階層を生成することができます。

SQL语句:
SELECT ID、氏名、年齢、のTestTable FOR XML RAW FROMセックス

执行结果:
<行ID = "1" NAME = "ジム"年齢= "20"セックス= "男" />
<行ID = "2" NAME = "ティナ"年齢= "23"セックス= "女" />

図2に示すように、XMLの自動
  AUTOモードは、XML結果にSELECT文のネストされたようにして生成された指定されたヒューリスティックに基づいて使用されます。あなたが生成されたXMLの形状の上に、最小限のコントロールを持っていること。XMLのAUTOモード仮生成方法の形状に加えて、あなたはまた、XMLの階層構造を生成するためのXMLクエリのために書くことができます。

SQLステートメント:
SELECT ID、名前、年齢、性別のTestTable FOR XML AUTO FROM

結果:
<のTestTable ID = "1" NAME = "ジム"年齢= "20"セックス= "M" />
<のTestTable ID = "2" NAME = "ティナ"年齢= " 23"セックス= " 女性" />

注:次のようにリターンのこのモードのXML構造は、SQLデータベースモデルのサンプルで、制御可能ではありません。

SQL语句:
USE AdventureWorks2012
GO
SELECT Cust.CustomerID、
OrderHeader.CustomerID、
OrderHeader.SalesOrderID、
OrderHeader.Status
Sales.CustomerカストFROM
INNER Sales.SalesOrderHeader OrderHeaderを登録しよう
Cust.CustomerID = OrderHeader.CustomerID ON
のXML AUTO FOR;

执行结果:
<カスト得意= "29825">
<OrderHeader得意= "29825" SalesOrderID = "43659"ステータス= "5" />
</カスト>
<カスト得意= "29672">
<OrderHeader得意= "29672" SalesOrderID = "43660"ステータス= "5" />
</カスト>

少しSELECTの順序を変更するフィールドは、結果が変化します。
SQL文を:
USE AdventureWorks2012
GO
SELECT OrderHeader.CustomerID、
OrderHeader.SalesOrderID、
OrderHeader.Statusは、
Cust.CustomerID
Sales.Customer FROMカスト
INNER JOINをSales.SalesOrderHeader OrderHeader
カストON。 = OrderHeader.CustomerID得意
FOR XMLのAUTO。

执行结果
<OrderHeader得意= "29825" SalesOrderID = "43659"ステータス= "5">
<カスト得意= "29825" />
</ OrderHeader>
<OrderHeader得意= "29672" SalesOrderID = "43660"ステータス= "5 ">
<カスト得意=" 29672" />
</ OrderHeader>

。3、FOR XML EXPLICIT
  明示モードは、XMLの形状をより詳細に制御することができます。あなたは自由にXMLの形状を決定するための属性と要素を混在させることができます。行のクエリ実行結果生成されたセットので、特定の形式を持っている必要があります。この行セットXMLフォーマットは、次に形状にマッピングされます。明示モードは、自由スペースで区切られた値(例えば、受注値のソート順のIDを有することができる属性)、および混合コンテンツを作成し、パッケージングおよびネストされた複雑なプロパティを作成し、混合要素と属性を使用することができます。
  しかし、EXPLICITモードのクエリを記述することは多くの問題だろう。階層を生成するために、EXPLICITモードを使用せずに(例えばXML RAW / AUTO / PATH TYPEコマンドとクエリモードのネストされた書き込み)、XMLのための新たな特定の機能を使用することができます。XMLクエリのネストされたが生成することができます任意のXML EXPLICITモードを使用して生成することができます。詳細については、XMLクエリおよびXMLクエリのTYPEコマンドのネストされたFOR使い方を参照してください。

4、XMLのパス
  XMLクエリ機能のネストされたとのPATHモードは一緒に、比較的簡単な方法で柔軟性EXPLICITモードを提供しています。

SQL文:
のTestTable FROM SELECT ID、名前、年齢、性別FOR XML PATH( '情報')

执行结果:
<情報>
<ID> 1 </ ID>
<名前>ジム</名前>
<年齢> 20 </年齢>
<性別>男</セックス>
</情報>
<情報>
<ID> 2 < / ID>
<名前>ティナ</名前>
<年齢> 23 </年齢>
<性別>女</セックス>
</情報>

属性としてID;
SQL文:
「@ID」、名前、年齢、性別のTestTable AS SELECT ID XML(「情報」)からのパスFOR

执行结果:
<情報ID = "1">
<名前>ジム</名前>
<年齢> 20 </年齢>
<性別>男</セックス>
</情報>
<情報ID = "2">
<名前>ティナ</名前>
<年齢> 23 </年齢>
<性別>女</セックス>
</情報>

フォー、要素
  ELEMENTS指定された列は、子要素として返され、すなわちELEMENTSオプションが指定されているXML結果は、要素中心のです。それ以外の場合は、XML属性にマップされます。このオプションは、RAW、AUTO、およびPATHモードでサポートされています。

SQL语句:
USE AdventureWorks2012
GO
SELECT Cust.CustomerID、
OrderHeader.CustomerID、
OrderHeader.SalesOrderID、
OrderHeader.Status
Sales.CustomerカストFROM
INNERはSales.SalesOrderHeader OrderHeaderを登録しよう
Cust.CustomerID = OrderHeader.CustomerID ON
XML AUTO、要素のための

执行结果:
<カスト>
<得意先> 29825 </得意先>
<OrderHeader>
<得意先> 29825 </得意先>
<SalesOrderID> 43659 </ SalesOrderID>
<ステータス> 5 </ステータス>
</ OrderHeader>
</カスト>
<カスト>
<得意先> 29672 </得意先>
<OrderHeader>
<得意先> 29672 </得意先>
<SalesOrderID> 43660 </ SalesOrderID>
<ステータス> 5 </ステータス>
</ OrderHeader>
</ CUST>

五、FOR XMLクエリのTYPEコマンド

(XMLクエリのTYPEディレクティブを使用して、例えば、又は前記XMLデータ・タイプはXMLでXMLクエリインスタンスデータ値のSQLテーブルの列と出力パラメータについて返さ)異なるサーバー構成としてSQL ServerのXMLデータ型のインスタンスのデータは、結果を返しますクライアントへ。クライアント・アプリケーション・コードでは、ADO.NETプロバイダは、サーバからのバイナリコード化された情報内のXMLデータのこのタイプを要求します。XML FOR TYPEディレクティブを使用せず場合は、XMLデータを文字列型を返します。いずれの場合も、クライアント・アクセス・インタフェースは常にXMLの内容のいずれかの形式を処理することができました。TYPEディレクティブなしのXMLの最上位レベルがカーソルと一緒に使用することはできませんのでご注意ください。
TYPEディレクティブが指定されていない場合は、返されたXMLクエリ結果のタイプのデータ型はnvarchar(max)です。

SELECT ID、名前、年齢、XMLのAUTO、TYPE FORのTestTable FROMセックス

おすすめ

転載: www.cnblogs.com/Juning/p/11502234.html