批注解释 - sql:overflow-field
在架构中,可以将某列标识为溢出列,以接收 XML 文档中所有未用完的数据。 此列是使用 sql:overflow 字段 注释在架构中指定的。 可能有多个溢出列。
每当定义了 sql:overflow 字段注释的 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 表的溢出列中,以及 CustOrder 表溢出列中 Order> 元素的所有未处理子元素和属性。<
测试工作示例
将在该示例中提供的架构另存为 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 脚本版本(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