sql:prefix(SQLXML 4.0)를 사용하여 유효한 ID, IDREF 및 IDREFS 유형 특성 만들기
적용 대상: SQL ServerAzure SQL Database
ID 형식 특성으로 특성을 지정할 수 있습니다. 그런 다음 IDREF 또는 IDREFS로 지정된 특성을 사용하여 ID 형식 특성을 참조하여 문서 간 링크를 사용하도록 설정할 수 있습니다.
ID, IDREF 및 IDREFS는 데이터베이스의 PK/FK(기본 키/외래 키) 관계에 해당하며 몇 가지 차이점이 있습니다. XML 문서에서 ID 유형 특성 값은 고유해야 합니다. CustomerID 및 OrderID 특성이 XML 문서에서 ID 형식으로 지정된 경우 이러한 값은 고유해야 합니다. 하지만 데이터베이스의 CustomerID 및 OrderID 열은 동일한 값을 가질 수 있습니다. 예를 들어 CustomerID = 1 및 OrderID = 1은 데이터베이스에서 유효합니다.
ID, IDREF 및 IDREFS 특성이 유효하려면 다음을 수행합니다.
ID 값은 XML 문서 내에서 고유해야 합니다.
모든 IDREF 및 IDREFS에 대해 참조된 ID 값은 XML 문서에 있어야 합니다.
ID, IDREF 및 IDREFS의 값은 명명된 토큰이어야 합니다. 예를 들어 정수 값 101은 ID 값일 수 없습니다.
ID, IDREF 및 IDREFS 형식의 특성은 텍스트, ntext 또는 이미지 또는 다른 이진 데이터 형식(예: 타임스탬프)의 열에 매핑할 수 없습니다.
XML 문서에 여러 ID가 포함된 경우 sql:prefix 주석을 사용하여 값이 고유한지 확인합니다.
XSD 고정 특성에는 sql:prefix 주석을 사용할 수 없습니다.
예제
다음 예제를 사용하여 작업 샘플을 만들려면 특정 요구 사항을 충족해야 합니다. 자세한 내용은 SQLXML 실행 요구 사항 예제를 참조 하세요.
A. ID 및 IDREFS 형식 지정
다음 스키마<에서 Customer> 요소는 Order> 자식 요소로 <구성됩니다. <Order> 요소에는 OrderDetail> 요소인 <자식 요소도 있습니다.
Customer>의 OrderIDList 특성은 Order> 요소의< OrderID 특성을 참조하는 IDREFS 형식 특성<입니다.
<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="CustOrders"
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
<sql:relationship name="OrderOrderDetail"
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child="Sales.SalesOrderDetail"
child-key="SalesOrderID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Sales.Customer" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders" maxOccurs="unbounded" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OrderDetail"
sql:relation="Sales.SalesOrderDetail"
sql:relationship="OrderOrderDetail"
maxOccurs="unbounded" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="ProductID" type="xsd:string" />
<xsd:attribute name="OrderQty" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="SalesOrderID"
type="xsd:ID" sql:prefix="ord-" />
<xsd:attribute name="OrderDate" type="xsd:date" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderIDList" type="xsd:IDREFS"
sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID"
sql:relationship="CustOrders" sql:prefix="ord-">
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
스키마에 대해 샘플 XPath 쿼리를 테스트하려면
위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 sqlPrefix.xml 저장합니다.
다음 템플릿을 복사하여 텍스트 파일에 붙여넣습니다. 파일을 sqlPrefix.xml 저장한 동일한 디렉터리에 sqlPrefixT.xml 저장합니다.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlPrefix.xml"> /Customer[@CustomerID=1] </sql:xpath-query> </ROOT>
매핑 스키마(sqlPrefix.xml)에 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리를 기준으로 합니다. 절대 경로도 지정할 수 있습니다. 예를 들면 다음과 같습니다.
mapping-schema="C:\SqlXmlTest\sqlPrefix.xml"
SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만들고 사용하여 템플릿을 실행합니다.
자세한 내용은 ADO를 사용하여 SQLXML 쿼리를 실행합니다.
다음은 결과의 일부입니다.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1" OrderIDList="ord-43860 ord-44501 ord-45283 ord-46042">
<Order SalesOrderID="ord-43860" OrderDate="2001-08-01" CustomerID="1">
<OrderDetail SalesOrderID="43860" ProductID="729" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="732" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="738" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="753" OrderQty="2" />
...
</Order>
...
</Customer>
</ROOT>
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기