sql:mapped, заметка (SQLXML 4.0)
Операция массовой загрузки XML обрабатывает заметку sql:mapped в XSD-схеме как ожидается, то есть если схема сопоставления задает 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-схеме определяется столбец переполнения (OverflowColumn), в который массовая загрузка сохраняет невостребованные данные.
Проверка рабочего образца
Создайте следующую таблицу в базе данных tempdb.
USE tempdbCREATE 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=TrueobjBL.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>