데이터 형식 변환 및 sql:datatype 주석(SQLXML 4.0)

적용 대상: SQL Server Azure SQL 데이터베이스

XSD 스키마에서 xsd:type 특성은 요소 또는 특성의 XSD 데이터 형식을 지정합니다. XSD 스키마를 사용하여 데이터베이스에서 데이터를 추출할 경우 지정된 데이터 형식이 데이터 서식 지정에 사용됩니다.

스키마에 XSD 형식을 지정하는 것 외에도 sql:datatype 주석을 사용하여 Microsoft SQL Server 데이터 형식을 지정할 수도 있습니다. xsd:typesql:datatype 특성은 XSD 데이터 형식과 SQL Server 데이터 형식 간의 매핑을 제어합니다.

xsd:type 특성

xsd:type 특성을 사용하여 열에 매핑되는 특성 또는 요소의 XML 데이터 형식을 지정할 수 있습니다. xsd:type은 서버에서 반환되는 문서와 실행되는 XPath 쿼리에도 영향을 줍니다. xsd:type이 포함된 매핑 스키마에 대해 XPath 쿼리가 실행되면 XPath는 쿼리를 처리할 때 지정된 데이터 형식을 사용합니다. XPath에서 xsd:type을 사용하는 방법에 대한 자세한 내용은 XSD 데이터 형식을 XPath 데이터 형식에 매핑(SQLXML 4.0)을 참조하세요.

반환된 문서에서 모든 SQL Server 데이터 형식은 문자열 표현으로 변환됩니다. 일부 데이터 형식에는 추가적인 변환이 필요합니다. 다음 표에서는 다양한 xsd:type 값에 사용되는 변환을 나열합니다.

XSD 데이터 형식 SQL Server 변환
부울 CONVERT(bit, COLUMN)
Date LEFT(CONVERT(nvarchar(4000), COLUMN, 126), 10)
decimal CONVERT(money, COLUMN)
id/idref/idrefs id-prefix + CONVERT(nvarchar(4000), COLUMN, 126)
nmtoken/nmtokens id-prefix + CONVERT(nvarchar(4000), COLUMN, 126)
Time SUBSTRING(CONVERT(nvarchar(4000), COLUMN, 126), 1+CHARINDEX(N'T', CONVERT(nvarchar(4000), COLUMN, 126)), 24)
나머지 추가 변환 없음

참고

변환이 불가능하거나(예: "XYZ"를 10진수 데이터 형식으로 변환) 값이 해당 데이터 형식의 범위(예: UnsignedShort XSD 형식으로 변환된 -100000)를 초과하기 때문에 SQL Server 반환된 값 중 일부는 xsd:type을 사용하여 지정된 XML 데이터 형식과 호환되지 않을 수 있습니다. 호환되지 않는 형식 변환으로 인해 XML 문서가 잘못되거나 SQL Server 오류가 발생할 수 있습니다.

SQL Server 데이터 형식에서 XSD 데이터 형식으로의 매핑

다음 표에서는 SQL Server 데이터 형식에서 XSD 데이터 형식으로의 명확한 매핑을 보여 줍니다. SQL Server 형식을 알고 있는 경우 이 표에서는 XSD 스키마에서 지정할 수 있는 해당 XSD 형식을 제공합니다.

SQL Server 데이터 형식 XSD 데이터 형식
bigint long
binary base64Binary
bit boolean
char string
datetime dateTime
decimal decimal
float double
image base64Binary
int int
money decimal
nchar string
ntext string
nvarchar string
numeric decimal
real float
smalldatetime dateTime
smallint short
smallmoney decimal
sql_variant string
sysname string
text string
timestamp dateTime
tinyint unsignedByte
varbinary base64Binary
varchar string
uniqueidentifier string

sql:datatype 주석

sql:datatype 주석은 SQL Server 데이터 형식을 지정하는 데 사용됩니다. 이 주석은 다음과 같은 경우에 지정해야 합니다.

  • XSD dateTime, date 또는 time 형식에서 dateTime SQL Server 열로 대량 로드합니다. 이 경우 sql:datatype="dateTime"을 사용하여 SQL Server 열 데이터 형식을 식별해야 합니다. 이 규칙은 updategram에도 적용됩니다.

  • SQL Server uniqueidentifier 형식의 열에 대량 로드하고 XSD 값은 중괄호({ 및 })를 포함하는 GUID입니다. sql:datatype="uniqueidentifier"를 지정하면 중괄호가 열에 삽입되기 전에 값에서 제거됩니다. sql:datatype을 지정하지 않으면 값이 중괄호와 함께 전송되고 삽입 또는 업데이트가 실패합니다.

  • XML 데이터 형식 base64Binary는 다양한 SQL Server 데이터 형식(이진, 이미지 또는 varbinary)에 매핑됩니다. XML 데이터 형식 base64Binary를 특정 SQL Server 데이터 형식에 매핑하려면 sql:datatype 주석을 사용합니다. 이 주석은 특성이 매핑되는 열의 명시적 SQL Server 데이터 형식을 지정합니다. 데이터가 데이터베이스에 저장될 경우 이 주석을 사용하는 것이 좋습니다. sql:datatype 주석을 지정하여 명시적 SQL Server 데이터 형식을 식별할 수 있습니다.

일반적으로 스키마에 sql:datatype 을 지정하는 것이 좋습니다.

예제

다음 예를 사용하여 작업 예제를 만들려면 특정 요구 사항이 충족되어야 합니다. 자세한 내용은 SQLXML 예제 실행에 대한 요구 사항을 참조하세요.

A. xsd:type 지정

이 예제에서는 스키마에서 xsd:type 특성을 사용하여 지정한 XSD 날짜 형식이 결과 XML 문서에 미치는 영향을 보여 줍니다. 이 스키마에서는 AdventureWorks 데이터베이스에 Sales.SalesOrderHeader 테이블의 XML 뷰를 제공합니다.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader">  
     <xsd:complexType>  
       <xsd:attribute name="SalesOrderID" type="xsd:string" />   
       <xsd:attribute name="CustomerID"   type="xsd:string" />   
       <xsd:attribute name="OrderDate"    type="xsd:date" />   
       <xsd:attribute name="DueDate"  />   
       <xsd:attribute name="ShipDate"  type="xsd:time" />   
     </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

이 XSD 스키마에는 SQL Server 날짜 값을 반환하는 세 가지 특성이 있습니다. 스키마에서 다음을 확인하십시오.

  • OrderDate 특성에 xsd:type=date를 지정합니다. OrderDate 특성에 대해 SQL Server 반환된 값의 날짜 부분이 표시됩니다.

  • ShipDate 특성에 대해 SQL Server 반환되는 값의 시간 부분이 표시되는 ShipDate 특성에 대해 xsd:type=time을 지정합니다.

  • DueDate 특성에 xsd:type을 지정하지 않습니다. SQL Server 반환되는 값과 동일한 값이 표시됩니다.

스키마에 대해 예제 XPath 쿼리를 테스트하려면
  1. 위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 xsdType.xml로 저장합니다.

  2. 다음 템플릿을 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 xsdType.xml을 저장한 디렉터리와 같은 디렉터리에 xsdTypeT.xml로 저장합니다.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="xsdType.xml">  
        /Order  
      </sql:xpath-query>  
    </ROOT>  
    

    매핑 스키마(xsdType.xml)에 대해 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리에 상대적입니다. 또한 다음과 같이 절대 경로를 지정할 수 있습니다.

    mapping-schema="C:\SqlXmlTest\xsdType.xml"  
    
  3. SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만든 다음 이 스크립트를 사용하여 템플릿을 실행합니다.

    자세한 내용은 ADO를 사용하여 SQLXML 4.0 쿼리 실행을 참조하세요.

다음은 결과 집합의 일부입니다.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Order SalesOrderID="43659"   
         CustomerID="676"   
         OrderDate="2001-07-01"   
         DueDate="2001-07-13T00:00:00"   
         ShipDate="00:00:00" />   
  <Order SalesOrderID="43660"   
         CustomerID="117"   
         OrderDate="2001-07-01"   
         DueDate="2001-07-13T00:00:00"   
         ShipDate="00:00:00" />   
 ...  
</ROOT>  

다음은 동등한 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="Order" sql:relation="Sales.SalesOrderHeader">  
    <AttributeType name="SalesOrderID" />  
    <AttributeType name="CustomerID"  />  
    <AttributeType name="OrderDate" dt:type="date" />  
    <AttributeType name="DueDate" />  
    <AttributeType name="ShipDate" dt:type="time" />  
  
    <attribute type="SalesOrderID" sql:field="OrderID" />  
    <attribute type="CustomerID" sql:field="CustomerID" />  
    <attribute type="OrderDate" sql:field="OrderDate" />  
    <attribute type="DueDate" sql:field="DueDate" />  
    <attribute type="ShipDate" sql:field="ShipDate" />  
</ElementType>  
</Schema>  

B. sql:datatype을 사용하여 SQL 데이터 형식 지정

작업 샘플은 XML 대량 로드 예제의 G 예제(SQLXML 4.0)를 참조하세요. 이 예에서는 "{" 및 "}"을 포함하는 GUID 값을 대량 로드합니다. 이 예제의 스키마는 SQL Server 데이터 형식을 uniqueidentifier로 식별하기 위해 sql:datatype을 지정합니다. 이 예제에서는 스키마에서 sql:datatype 을 지정해야 하는 경우를 보여 줍니다.