sql:overflow-field を使用した、未使用データの取得 (SQLXML 4.0)
適用対象: SQL Server Azure SQL データベース
Transact-SQL OPENXML 関数を使用して XML ドキュメントからデータベースにレコードを挿入すると、ソース XML ドキュメントの未使用のデータをすべて列に格納できます。 注釈付きスキーマを使用してデータベースからデータを取得する場合は、 sql:overflow-field 属性を指定して、オーバーフロー データが格納されているテーブル内の列を識別できます。 sql:overflow-field属性は<element>で指定できます。
データは次のように取得されます。
オーバーフロー列に格納されている属性は、 sql:overflow-field 注釈を含む要素に追加されます。
データベースのオーバーフロー列に格納された子要素とその子孫が、スキーマで明示的に指定されたコンテンツの後に子要素として追加されます。 このとき、順序は維持されません。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。 詳細については、「
A. 要素に sql:overflow-field を指定する
この例では、次のスクリプトを実行して tempdb データベースにテーブル Customers2 が作成済みであることを前提としています。
USE tempdb
CREATE TABLE Customers2 (
CustomerID VARCHAR(10),
ContactName VARCHAR(30),
AddressOverflow NVARCHAR(500))
GO
INSERT INTO Customers2 VALUES (
'ALFKI',
'Joe',
'<Address>
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Address>')
GO
さらに、tempdb データベースの仮想ディレクトリと、"template" という名前のテンプレート仮想名 template 型を作成する必要があります。
次の例では、マッピング スキーマで、Customers2 テーブルの AddressOverflow 列に格納されている未使用データを取得します。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Customers2" sql:overflow-field="AddressOverflow" >
<xsd:complexType>
<xsd:attribute name="CustomerID" type="xsd:integer"/>
<xsd:attribute name="ContactName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 Overflow.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、 Overflow.xml を保存したディレクトリに OverflowT.xml として保存します。 このテンプレートのクエリでは、Customers2 テーブル内のレコードが選択されます。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="Overflow.xml"> /Customers2 </sql:xpath-query> </ROOT>
マッピング スキーマ (Overflow.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\SqlXmlTest\Overflow.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。
結果セットは次のようになります。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customers2 CustomerID="ALFKI" ContactName="Joe">
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Customers2>
</ROOT>