注釈の解釈 - sql:overflow-field
適用対象: SQL Server Azure SQL Database
スキーマでは、XML ドキュメントからのすべての未使用データを受け取るオーバーフロー列を指定することができます。 この列は、 sql:overflow-field 注釈を使用してスキーマで指定されます。 オーバーフロー列は複数指定することもできます。
定義された sql:overflow-field 注釈がある XML ノード (要素または属性) がスコープに入ると、オーバーフロー列がアクティブになり、未使用のデータを受け取ります。 ノードがスコープ外に出ると、オーバーフロー列はアクティブではなくなります。それまでのオーバーフロー フィールドがある場合は、XML 一括読み込みによってそのフィールドがアクティブになります。
オーバーフロー列にデータを格納すると、XML 一括読み込みでは、 sql:overflow-field が定義されている親要素の開始タグと終了タグも格納されます。
たとえば、次のスキーマでは、 <Customers> および <CustOrder> 要素について説明します。 これらの要素それぞれに、オーバーフロー列が指定されています。
<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustCustOrder"
parent="Cust"
parent-key="CustomerID"
child="CustOrder"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="ROOT" sql:is-constant="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Customers"
sql:relation="Cust"
sql:overflow-field="OverflowColumn">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustomerID" type="xsd:integer"/>
<xsd:element name="CompanyName" type="xsd:string"/>
<xsd:element name="City" type="xsd:string"/>
<xsd:element name="Order"
sql:relation="CustOrder"
sql:relationship="CustCustOrder"
sql:overflow-field="OverflowColumn">
<xsd:complexType>
<xsd:attribute name="OrderID"/>
<xsd:attribute name="CustomerID"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
スキーマでは、 <Customer> 要素は Cust テーブルにマップされ、 <Order> 要素は CustOrder テーブルにマップされます。
<Customer> 要素と <Order> 要素の両方がオーバーフロー列を識別します。 したがって、XML 一括読み込みでは、 <Customer> 要素のすべての未使用の子要素と属性が Cust テーブルのオーバーフロー列に保存され、 <Order> 要素のすべての未使用の子要素と属性が CustOrder テーブルのオーバーフロー列に保存されます。
実際のサンプルをテストするには
この例のスキーマを SampleSchema.xml として保存します。
次のテーブルを作成します。
CREATE TABLE Cust ( CustomerID int PRIMARY KEY, CompanyName varchar(20) NOT NULL, City varchar(20) DEFAULT 'Seattle', OverflowColumn nvarchar(200)) GO CREATE TABLE CustOrder ( OrderID int PRIMARY KEY, CustomerID int FOREIGN KEY REFERENCES Cust(CustomerID), OverflowColumn nvarchar(200)) GO
次のサンプル XML データを SampleXMLData.xml として保存します。
<ROOT> <Customers> <CustomerID>1111</CustomerID> <CompanyName>Hanari Carnes</CompanyName> <City><![CDATA[NY]]> </City> <Junk>garbage in overflow</Junk> <Order OrderID="1" /> <Order OrderID="2" /> </Customers> <Customers> <CustomerID>1112</CustomerID> <CompanyName>Toms Spezialitten</CompanyName> <City><![CDATA[LA]]> </City> <xyz><address>111 Maple, Seattle</address></xyz> <Order OrderID="3" /> </Customers> <Customers> <CustomerID>1113</CustomerID> <CompanyName>Victuailles en stock</CompanyName> <Order OrderID="4" /> </Customers> </ROOT>
XML 一括読み込みを実行するには、次の Microsoft Visual Basic Scripting Edition (VBScript) の例を Sample.vbs として保存して実行します。
set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0") objBL.ConnectionString = "provider=SQLOLEDB;data source=localhost;database=tempdb;integrated security=SSPI" objBL.ErrorLogFile = "c:\error.log" objBL.CheckConstraints = True objBL.Execute "c:\SampleSchema.xml", "c:\SampleXMLData.xml" set objBL=Nothing