데이터 형식 강제 변환(XDR 스키마)
중요 |
---|
이 항목은 레거시 응용 프로그램에 대한 참조용으로 포함되었습니다. 이 기능에 대해서는 이후 개발 작업이 진행되지 않습니다. 새 개발 작업에서는 이 기능을 사용하지 마십시오. 대신 주석이 추가된 XSD 스키마를 사용하여 XML 뷰를 만드십시오. 자세한 내용은 주석이 추가된 XSD 스키마 소개(SQLXML 4.0)을 참조하십시오. 주석이 추가된 기존 XDR 스키마를 XSD 스키마로 변환할 수 있습니다. 자세한 내용은 주석이 추가된 XDR 스키마를 해당 XSD 스키마로 변환(SQLXML 4.0)을 참조하십시오. |
요소나 특성의 데이터 형식은 XDR 스키마에 지정할 수 있습니다. XSD 스키마를 사용하여 데이터베이스에서 데이터를 추출할 경우 해당 데이터 형식이 쿼리 결과로 출력됩니다. dt:type 및 sql:datatype 주석은 XDR 데이터 형식과 Microsoft SQL Server 데이터 형식 간의 매핑을 제어하는 데 사용됩니다.
dt:type
dt:type 특성을 사용하여 열에 매핑되는 특성이나 요소의 XML 데이터 형식을 지정할 수 있습니다. dt:type 특성은 <AttributeType> 또는 **<ElementType>**에 지정할 수 있습니다. dt:type은 서버에서 반환되는 문서뿐만 아니라 실행되는 XPath 쿼리에도 영향을 미칩니다. dt:type이 포함된 매핑 스키마에 대해 XPath 쿼리가 실행될 때 XPath는 지정된 데이터 형식을 사용하여 쿼리를 처리합니다. XPath에서 dt:type을 사용하는 방법에 대한 자세한 내용은 XPath 데이터 형식(SQLXML 4.0)을 참조하십시오.
반환된 문서에서 모든 SQL Server 데이터 형식은 문자열 표현으로 변환됩니다. 일부 데이터 형식에는 추가적인 변환이 필요합니다. 다음 표에서는 다양한 dt:type 값에 사용되는 변환을 보여 줍니다.
XML 데이터 형식 |
SQL Server 변환 |
---|---|
bit |
CONVERT(bit, COLUMN) |
date |
LEFT(CONVERT(nvarchar(4000), COLUMN, 126), 10) |
fixed.14.4 |
CONVERT(money, COLUMN) |
id/idref/idrefs |
id-prefix + CONVERT(nvarchar(4000), COLUMN, 126) |
nmtoken/nmtokens |
id-prefix + CONVERT(nvarchar(4000), COLUMN, 126) |
time/time.tz |
SUBSTRING(CONVERT(nvarchar(4000), COLUMN, 126), 1+CHARINDEX(N'T', CONVERT(nvarchar(4000), COLUMN, 126)), 24) |
나머지 |
추가 변환 없음 |
"XYZ"를 숫자 데이터 형식으로 변환하는 경우처럼 변환이 가능하지 않거나 -100000을 ui2 형식으로 변환하는 경우처럼 값이 데이터 형식의 범위를 초과하는 경우와 같이, SQL Server 값에 따라 일부 XML 데이터 형식으로 변환할 수 없는 경우도 있습니다. 호환되지 않는 형식 변환은 XML 문서를 유효하지 않게 만들거나 SQL Server 오류를 발생시킬 수 있습니다.
SQL Server 데이터 형식에서 XML 데이터 형식으로의 매핑
다음 표에서는 SQL Server 데이터 형식에서 XML 데이터 형식으로의 일반적인 매핑을 보여 줍니다.
SQL Server 데이터 형식 |
XML 데이터 형식 |
---|---|
bigint |
i8 |
binary |
bin.base64 |
bit |
boolean |
char |
char |
datetime |
datetime |
decimal |
r8 |
float |
r8 |
image |
bin.base64 |
int |
int |
money |
r8 |
nchar |
string |
ntext |
string |
nvarchar |
string |
numeric |
r8 |
real |
r4 |
smalldatetime |
datetime |
smallint |
i2 |
smallmoney |
fixed.14.4 |
sysname |
string |
text |
string |
timestamp |
ui8 |
tinyint |
ui1 |
varbinary |
bin.base64 |
varchar |
string |
uniqueidentifier |
uuid |
sql:datatype
XML 데이터 형식 bin.base64는 다양한 Microsoft SQL Server 데이터 형식(binary, image, varbinary)에 매핑됩니다. XML 데이터 형식 bin.base64를 특정 SQL Server 데이터에 명시적으로 매핑하는 데는 sql:datatype 주석이 사용됩니다. sql:datatype은 특성이 매핑될 열의 SQL Server 데이터 형식을 지정합니다.
데이터가 데이터베이스에 저장될 경우 이 주석을 사용하는 것이 좋습니다. sql:datatype 주석을 지정하면 명시적 SQL Server 데이터 형식을 식별할 수 있습니다. 그러면 sql:datatype에 지정된 형식으로 데이터 항목이 저장됩니다.
sql:datatype 주석은 SQL Server 기본 제공 데이터 형식을 모두 지원합니다. 사용자 정의 데이터 형식이나 동의어는 지원되지 않습니다. sql:datatype="nvarchar" 및 sql:datatype="nchar(10)" 등의 전체 자릿수와 소수 자릿수도 지원됩니다.
매핑 스키마에 XDR 및 SQL Server 데이터 형식을 지정하면 SQL 쿼리에서 불필요한 데이터 변환을 간편하게 제거할 수 있습니다. 예를 들어 XPath는 SQL Server 데이터 형식에서 XDR 데이터 형식으로 변환한 후 다시 XDR 형식에서 XPath 형식으로 변환해야 하지만, sql:datatype 또는 XDR 형식이 지정되어 있고 변환할 필요가 없는 것으로 확인되면 XPath가 변환을 수행하지 않습니다.
기본 키 열의 경우 이러한 변환을 제거하면 성능을 크게 향상시킬 수 있습니다. 예를 들어 다음 쿼리에서는 일반적으로 CustomerID를 문자열(nvarchar)로 변환해야 올바른 결과를 얻을 수 있습니다.
Customer[@CustomerID='ALFKI']
스키마에 CustomerID가 sql:datatype="nvarchar" 형식으로 주석이 지정되어 있으면 XPath가 불필요한 데이터 변환을 피할 수 있습니다.
예
다음 예를 사용하여 작업 예제를 만들려면 특정 요구 사항이 충족되어야 합니다. 자세한 내용은 SQLXML 예 실행을 위한 요구 사항를 참조하십시오.
1. 특성에 dt:type 지정
이 XDR 스키마에서 dt:type은 OrdDate 및 ShipDate 특성에 지정됩니다.
ReqDate 특성의 경우 XPath 데이터 형식이 지정되지 않습니다. 따라서 XPath는 데이터베이스의 RequiredDate 열에서 검색된 SQL Server datetime 값을 반환합니다.
"date" XPath 데이터 형식은 OrdDate 특성에 지정됩니다. XPath는 OrderDate 열에서 검색된 값의 날짜 부분만 반환하고 시간은 반환하지 않습니다.
"time" XPath 데이터 형식은 ShipDate 특성에 지정됩니다. XPath는 ShippedDate 열에서 검색된 값의 시간 부분만 반환하고 날짜는 반환하지 않습니다.
<?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="Orders">
<AttributeType name="OID" />
<AttributeType name="CustID" />
<AttributeType name="OrdDate" dt:type="date" />
<AttributeType name="ReqDate" />
<AttributeType name="ShipDate" dt:type="time" />
<attribute type="OID" sql:field="OrderID" />
<attribute type="CustID" sql:field="CustomerID" />
<attribute type="OrdDate" sql:field="OrderDate" />
<attribute type="ReqDate" sql:field="RequiredDate" />
<attribute type="ShipDate" sql:field="ShippedDate" />
</ElementType>
</Schema>
스키마에 대해 예제 XPath 쿼리를 테스트하려면
위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 dataTypeXdr.xml로 저장합니다.
다음 템플릿을 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 dataTypeXdr.xml을 저장한 디렉터리와 같은 디렉터리에 dataTypeXdrT.xml로 저장합니다.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="dataTypeXdr.xml"> /Order[@OID=43860] </sql:xpath-query> </ROOT>
다음 URL을 입력하면 템플릿이 실행됩니다.
http://IISServer/AdventureWorks/template/dataTypeXdrT.xml
결과 집합은 다음과 같습니다.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order OID="43860" CustID="1" OrdDate="2001-08-01" ReqDate="2001-08-13T00:00:00" ShipDate="00:00:00" />
</ROOT>
2. 특성에 sql:datatype 지정
이 예에서는 sql:datatype을 사용하여 LargePhoto 열의 SQL Server 데이터 형식을 식별합니다.
<?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="ProductPhoto" sql:relation="Production.ProductPhoto">
<AttributeType name="PhotoID" />
<AttributeType name="filename" />
<AttributeType name="photo" sql:datatype="image" />
<attribute type="PhotoID" sql:field="ProductPhotoID" />
<attribute type="filename" sql:field="LargePhotoFileName" />
<attribute type="photo" sql:field="LargePhoto" />
</ElementType>
</Schema>
스키마에 대해 예제 XPath 쿼리를 테스트하려면
위 스키마 코드를 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 DataTypeXdr2.xml로 저장합니다.
다음 템플릿을 복사한 후 텍스트 파일에 붙여넣습니다. 파일을 DataTypeXdr2.xml을 저장한 디렉터리와 같은 디렉터리에 DataTypeXdr2T.xml로 저장합니다.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="DataTypeXdr2.xml"> /ProductPhoto[@PhotoID="100"] </sql:xpath-query> </ROOT>
매핑 스키마(DataTypeXdr2.xml)에 대해 지정된 디렉터리 경로는 템플릿이 저장된 디렉터리에 상대적입니다. 또한 다음과 같이 절대 경로를 지정할 수 있습니다.
mapping-schema="C:\MyDir\DataTypeXdr2.xml"
SQLXML 4.0 테스트 스크립트(Sqlxml4test.vbs)를 만든 다음 이 스크립트를 사용하여 템플릿을 실행합니다.
자세한 내용은 ADO를 사용하여 SQLXML 4.0 쿼리 실행을 참조하십시오.
결과 집합은 다음과 같습니다.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ProductPhoto PhotoID="100" filename="racer02_red_large.gif"
photo="Binary_base64_image_returned_here"/>
</ROOT>