sql:mapped (SQLXML 4.0)
XML 大容量加载按预期方式处理 XSD 架构中的 sql:mapped 批注,即如果映射架构为任何元素或属性指定 sql:mapped="false",XML 大容量加载则不会尝试在对应的列中存储关联的数据。
XML 大容量加载忽略未映射的元素和属性(这可能因为该架构未对它们进行描述,也可能因为它们在 XSD 架构中批注有 sql:mapped="false")。所有未映射的数据将转到溢出列(如果已使用 sql:overflow-field 指定了这样的列)。
例如,请考虑以下 XSD 架构:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<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:attribute name="CustomerID" type="xsd:integer" />
<xsd:attribute name="CompanyName" type="xsd:string" />
<xsd:attribute name="City" type="xsd:string" />
<xsd:attribute name="HomePhone" type="xsd:string"
sql:mapped="false" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
由于 HomePhone 属性指定了 sql:mapped="false",因此 XML 大容量加载不会将此属性映射到对应的列。XSD 架构标识 XML 大容量加载在其中存储这一未用完数据的溢出列 (OverflowColumn)。
测试工作示例
在 tempdb 数据库中创建以下表:
USE tempdb CREATE TABLE Cust (CustomerID int PRIMARY KEY, CompanyName varchar(20) NOT NULL, City varchar(20) DEFAULT 'Seattle', OverflowColumn nvarchar(200)) GO
将本示例提供的架构另存为 SampleSchema.xml。
将以下示例 XML 数据另存为 SampleXMLData.xml:
<ROOT> <Customers CustomerID="1111" CompanyName="Sean Chai" City="NY" HomePhone="111-1111" /> <Customers CustomerID="1112" CompanyName="Dont Know" City="LA" HomePhone="222-2222" /> </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
以下是等效的 XDR 架构:
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
<ElementType name="ROOT" sql:is-constant="1">
<element type="Customers" />
</ElementType>
<ElementType name="Customers" sql:relation="Cust"
sql:overflow-field="OverflowColumn" >
<AttributeType name="CustomerID" />
<AttributeType name="CompanyName" />
<AttributeType name="City" />
<AttributeType name="HomePhone" />
<attribute type="CustomerID" />
<attribute type="CompanyName" />
<attribute type="City" />
<attribute type="HomePhone" sql:map-field="0" />
</ElementType>
</Schema>