Updategram에 주석이 추가된 매핑 스키마 지정(SQLXML 4.0)
적용 대상: SQL Server Azure SQL Database
이 항목에서는 updategram에 지정된 매핑 스키마(XSD 또는 XDR)를 사용하여 업데이트를 처리하는 방법을 설명합니다. updategram에서 Updategram의 요소와 특성을 Microsoft SQL Server의 테이블 및 열에 매핑하는 데 사용할 주석이 추가된 매핑 스키마의 이름을 제공할 수 있습니다. updategram에 매핑 스키마를 지정하면 updategram에 지정된 요소 및 특성 이름이 매핑 스키마의 요소 및 특성에 매핑되어야 합니다.
매핑 스키마를 지정하려면 동기화> 요소의< 매핑 스키마 특성을 사용합니다. 다음 예에서는 두 개의 Updategram을 보여 줍니다. 하나는 단순한 매핑 스키마를 사용하고 다른 하나는 더 복잡한 스키마를 사용합니다.
참고 항목
이 설명서에서는 SQL Server의 템플릿 및 매핑 스키마 지원에 익숙하다고 가정합니다. 자세한 내용은 주석이 추가된 XSD 스키마 소개(SQLXML 4.0)를 참조하세요. XDR 을 사용하는 레거시 애플리케이션의 경우 주석이 추가된 XDR 스키마(SQLXML 4.0에서는 사용되지 않음)를 참조하세요.
데이터 형식 처리
스키마가 이미지, 이진 또는 varbinarySQL Server 데이터 형식(sql:datatype 사용)을 지정하고 XML 데이터 형식을 지정하지 않는 경우 updategram은 XML 데이터 형식이 이진 base 64라고 가정합니다. 데이터가 bin.base 형식인 경우 형식을 명시적으로 지정해야 합니다(dt:type=bin.base 또는 type="xsd:hexBinary").
스키마가 dateTime, date 또는 time XSD 데이터 형식을 지정하는 경우 sql:datatype="dateTime"을 사용하여 해당 SQL Server 데이터 형식도 지정해야 합니다.
SQL Server money 형식의 매개 변수를 처리할 때 매핑 스키마의 적절한 노드에 sql:datatype="money"를 명시적으로 지정해야 합니다.
예제
다음 예제를 사용하여 작업 샘플을 만들려면 SQLXML 실행 요구 사항 예제에 지정된 요구 사항을 충족해야 합니다.
A. 단순한 매핑 스키마를 사용하여 Updategram 만들기
다음 XSD 스키마(SampleSchema.xml)는 Customer> 요소를 Sales.Customer 테이블에 매핑<하는 매핑 스키마입니다.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Customer" sql:relation="Sales.Customer" >
<xsd:complexType>
<xsd:attribute name="CustID"
sql:field="CustomerID"
type="xsd:string" />
<xsd:attribute name="RegionID"
sql:field="TerritoryID"
type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
다음 updategram은 Sales.Customer 테이블에 레코드를 삽입하고 이전 매핑 스키마를 사용하여 이 데이터를 테이블에 제대로 매핑합니다. updategram은 스키마에 정의된 것과 동일한 요소 이름인 <Customer>를 사용합니다. updategram이 특정 스키마를 지정하기 때문에 필수입니다.
updategram을 테스트하려면
위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 SampleUpdateSchema.xml로 저장합니다.
아래 updategram 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 SampleUpdateSchema.xml 저장한 디렉터리에 SampleUpdategram.xml 저장합니다.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram"> <updg:sync mapping-schema="SampleUpdateSchema.xml"> <updg:before> <Customer CustID="1" RegionID="1" /> </updg:before> <updg:after> <Customer CustID="1" RegionID="2" /> </updg:after> </updg:sync> </ROOT>
매핑 스키마(SampleUpdateSchema.xml)에 대해 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리에 상대적입니다. 절대 경로도 지정할 수 있습니다. 예를 들면 다음과 같습니다.
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 템플릿을 실행합니다.
자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.
해당하는 XDR 스키마입니다.
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Customer" sql:relation="Sales.Customer" >
<AttributeType name="CustID" />
<AttributeType name="RegionID" />
<attribute type="CustID" sql:field="CustomerID" />
<attribute type="RegionID" sql:field="TerritoryID" />
</ElementType>
</Schema>
B. 매핑 스키마에 지정된 부모-자식 관계를 사용하여 레코드 삽입
스키마 요소는 관련될 수 있습니다. <sql:relationship> 요소는 스키마 요소 간의 부모-자식 관계를 지정합니다. 이 정보는 기본 키/외래 키 관계가 있는 해당 테이블을 업데이트하는 데 사용됩니다.
다음 매핑 스키마(SampleSchema.xml)는 Order>와 <OD>라는 두 가지 요소<로 구성됩니다.
<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="OrderOD"
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child="Sales.SalesOrderDetail"
child-key="SalesOrderID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OD"
sql:relation="Sales.SalesOrderDetail"
sql:relationship="OrderOD" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="ProductID" type="xsd:integer" />
<xsd:attribute name="UnitPrice" type="xsd:decimal" />
<xsd:attribute name="OrderQty" type="xsd:integer" />
<xsd:attribute name="UnitPriceDiscount" type="xsd:decimal" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="OrderDate" type="xsd:date" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
다음 updategram은 이 XSD 스키마를 사용하여 주문 43860에 대한 새 주문 세부 정보 레코드(<이후> 블록의< OD> 요소)를 추가합니다. 매핑 스키마 특성은 updategram에서 매핑 스키마를 지정하는 데 사용됩니다.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="SampleUpdateSchema.xml" >
<updg:before>
<Order SalesOrderID="43860" />
</updg:before>
<updg:after>
<Order SalesOrderID="43860" >
<OD ProductID="753" UnitPrice="$10.00"
Quantity="5" Discount="0.0" />
</Order>
</updg:after>
</updg:sync>
</ROOT>
updategram을 테스트하려면
위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 SampleUpdateSchema.xml로 저장합니다.
위의 updategram 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 SampleUpdateSchema.xml 저장한 디렉터리에 SampleUpdategram.xml 저장합니다.
매핑 스키마(SampleUpdateSchema.xml)에 대해 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리에 상대적입니다. 절대 경로도 지정할 수 있습니다. 예를 들면 다음과 같습니다.
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 템플릿을 실행합니다.
자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.
해당하는 XDR 스키마입니다.
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="OD" sql:relation="Sales.SalesOrderDetail" >
<AttributeType name="SalesOrderID" />
<AttributeType name="ProductID" />
<AttributeType name="UnitPrice" dt:type="fixed.14.4" />
<AttributeType name="OrderQty" />
<AttributeType name="UnitPriceDiscount" />
<attribute type="SalesOrderID" />
<attribute type="ProductID" />
<attribute type="UnitPrice" />
<attribute type="OrderQty" />
<attribute type="UnitPriceDiscount" />
</ElementType>
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
<AttributeType name="CustomerID" />
<AttributeType name="SalesOrderID" />
<AttributeType name="OrderDate" />
<attribute type="CustomerID" />
<attribute type="SalesOrderID" />
<attribute type="OrderDate" />
<element type="OD" >
<sql:relationship
key-relation="Sales.SalesOrderHeader"
key="SalesOrderID"
foreign-key="SalesOrderID"
foreign-relation="Sales.SalesOrderDetail" />
</element>
</ElementType>
</Schema>
C. XSD 스키마에 지정된 부모-자식 관계 및 역 주석을 사용하여 레코드 삽입
이 예제에서는 updategram 논리가 XSD에 지정된 부모-자식 관계를 사용하여 업데이트를 처리하는 방법과 역 주석을 사용하는 방법을 보여 줍니다. 역 주석에 대한 자세한 내용은 sql:relationship에서 sql:inverse 특성 지정(SQLXML 4.0)을 참조하세요.
이 예제에서는 다음 테이블이 tempdb 데이터베이스에 있다고 가정합니다.
Cust (CustomerID, CompanyName)
- 기본 키는 어디에 있습니다CustomerID
.Ord (OrderID, CustomerID)
- 테이블CustomerID
의 기본 키를 참조하는CustomerID
외래 키입니다Cust
.
updategram은 다음 XSD 스키마를 사용하여 Cust 및 Ord 테이블에 레코드를 삽입합니다.
<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="OrdCust" inverse="true"
parent="Ord"
parent-key="CustomerID"
child-key="CustomerID"
child="Cust"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Order" sql:relation="Ord">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Customer" sql:relationship="OrdCust"/>
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:int"/>
<xsd:attribute name="CustomerID" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Customer" sql:relation="Cust">
<xsd:complexType>
<xsd:attribute name="CustomerID" type="xsd:string"/>
<xsd:attribute name="CompanyName" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
이 예제의 XSD 스키마에는 <Customer> 및< Order> 요소가 있으며 두 요소 간의 부모-자식 관계를 지정합니다. Order>를< 부모 요소로, Customer>를 자식 요소<로 식별합니다.
updategram 처리 논리는 부모-자식 관계에 대한 정보를 사용하여 레코드가 테이블에 삽입되는 순서를 결정합니다. 이 예제에서 updategram 논리는 먼저 Ord 테이블에 레코드를 삽입하려고 시도합니다(Order>가 부모이기 때문<). 그런 다음 Cust 테이블에 레코드를 삽입하려고 시도합니다(Customer>가 자식이기 때문<). 하지만 데이터베이스 테이블 스키마에 포함된 기본 키/외래 키 정보 때문에 이 삽입 작업을 수행하면 데이터베이스에서 외래 키 위반이 발생하고 삽입이 실패합니다.
업데이트 작업 중에 부모-자식 관계를 되돌리도록 updategram 논리에 지시하기 위해 관계> 요소에 역 주석이 <지정됩니다. 따라서 먼저 Cust 테이블에서 레코드가 추가된 다음 Ord 테이블에 추가되고 작업이 성공합니다.
다음 Updategram은 지정한 XSD 스키마를 사용하여 Ord 테이블에 주문(OrderID=2)을 삽입하고 Cust 테이블에 고객(CustomerID='AAAAA')을 삽입합니다.
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="SampleUpdateSchema.xml" >
<updg:before/>
<updg:after>
<Order OrderID="2" CustomerID="AAAAA" >
<Customer CustomerID="AAAAA" CompanyName="AAAAA Company" />
</Order>
</updg:after>
</updg:sync>
</ROOT>
updategram을 테스트하려면
tempdb 데이터베이스에서 다음 테이블을 만듭니다.
USE tempdb CREATE TABLE Cust(CustomerID varchar(5) primary key, CompanyName varchar(20)) GO CREATE TABLE Ord (OrderID int primary key, CustomerID varchar(5) references Cust(CustomerID)) GO
위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 SampleUpdateSchema.xml로 저장합니다.
위의 updategram 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 SampleUpdateSchema.xml 저장한 디렉터리에 SampleUpdategram.xml 저장합니다.
매핑 스키마(SampleUpdateSchema.xml)에 대해 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리에 상대적입니다. 절대 경로도 지정할 수 있습니다. 예를 들면 다음과 같습니다.
mapping-schema="C:\SqlXmlTest\SampleUpdateSchema.xml"
SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 템플릿을 실행합니다.
자세한 내용은 ADO를 사용한 SQLXML 4.0 쿼리를 실행합니다.