다음을 통해 공유


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

적용 대상: SQL ServerAzure SQL Database

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 변환
Boolean CONVERT(bit, COLUMN)
날짜 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)
나머지 추가 변환 없음

참고 항목

SQL Server에서 반환되는 값 중 일부는 변환이 불가능하거나(예: "XYZ"를 10진수 데이터 형식으로 변환) 값이 해당 데이터 형식의 범위를 초과하기 때문에(예: UnsignedShort XSD 형식으로 변환된 -100000) 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
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, 날짜 또는 시간 형식에서 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 특성에 대해 xsd:type=time을 지정합니다. ShipDate 특성에 대해 SQL Server에서 반환하는 값의 시간 부분이 표시됩니다.

  • 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 대량 로드 예제( SQLXML 4.0)의 예제 G를 참조하세요. 이 예제에서는 "{" 및 "}"를 포함한 GUID 값이 대량으로 로드됩니다. 이 예제의 스키마는 sql:datatype을 지정하여 SQL Server 데이터 형식을 uniqueidentifier식별합니다. 이 예제에서는 스키마에서 sql:datatype을 지정해야 하는 경우를 보여 줍니다.