생성자 함수(XQuery)
지정된 입력으로부터 생성자 함수는 XSD에 기본 제공되거나 사용자 정의 원자 유형의 항목을 만듭니다.
구문
TYP($atomicvalue as xdt:anyAtomicType?
) as TYP?
인수
$strval
변환될 문자열입니다.TYP
기본 제공 XSD 유형입니다.
주의
생성자는 기본 및 파생 원자 XSD 유형에 대해 지원됩니다. 하지만 xdt:yearMonthDuration and xdt:dayTimeDuration을 포함하는 xs:duration과 xs:QName, xs:NMTOKEN 및 xs:NOTATION은 지원되지 않습니다. 연결된 스키마 컬렉션에서 사용할 수 있는 사용자 정의 원자 유형도 다음 유형으로부터 직접 또는 간접으로 파생될 수 있는 경우 사용할 수 있습니다.
지원되는 기본 유형
다음은 지원되는 기본 유형입니다.
xs:string
xs:boolean
xs:decimal
xs:float
xs:double
xs:duration
xs:dateTime
xs:time
xs:date
xs:gYearMonth
xs:gYear
xs:gMonthDay
xs:gDay
xs:gMonth
xs:hexBinary
xs:base64Binary
xs:anyURI
지원되는 파생 유형
다음은 지원되는 파생 유형입니다.
xs:normalizedString
xs:token
xs:language
xs:Name
xs:NCName
xs:ID
xs:IDREF
xs:ENTITY
xs:integer
xs:nonPositiveInteger
xs:negativeInteger
xs:long
xs:int
xs:short
xs:byte
xs:nonNegativeInteger
xs:unsignedLong
xs:unsignedInt
xs:unsignedShort
xs:unsignedByte
xs:positiveInteger
SQL Server는 또한 다음과 같은 방식으로 생성 함수 호출에 대한 상수 계산을 지원합니다.
인수가 문자열 리터럴인 경우 식은 컴파일 중에 평가됩니다. 값이 유형 제약 조건에 만족하지 않는 경우 정적 오류가 발생합니다.
인수가 다른 유형의 리터럴인 경우 식은 컴파일 중에 평가됩니다. 값이 유형 제약 조건에 만족하지 않는 경우 빈 시퀀스가 반환됩니다.
예
이 항목에서는 AdventureWorks 데이터베이스의 다양한 xml 유형 열에 저장된 XML 인스턴스에 대한 XQuery 예를 제공합니다. 이러한 각 열에 대한 개요는 AdventureWorks 데이터베이스의 xml 데이터 형식 표시를 참조하십시오.
1. dateTime() XQuery 함수를 사용하여 오래된 제품 설명 검색
이 예에서는 예제 XML 문서가 먼저 xml 유형의 변수에 할당됩니다. 이 문서에는 3개의 예제 <ProductDescription> 요소가 포함되며 각 요소에는 <DateCreated> 자식 요소가 포함됩니다.
그런 다음 변수를 쿼리하여 특정 날짜 이전에 생성된 제품 설명만 검색합니다. 비교를 위해 쿼리에서는 xs:dateTime() 생성자 함수를 사용하여 날짜를 입력합니다.
declare @x xml
set @x = '<root>
<ProductDescription ProductID="1" >
<DateCreated DateValue="2000-01-01T00:00:00Z" />
<Summary>Some Summary description</Summary>
</ProductDescription>
<ProductDescription ProductID="2" >
<DateCreated DateValue="2001-01-01T00:00:00Z" />
<Summary>Some Summary description</Summary>
</ProductDescription>
<ProductDescription ProductID="3" >
<DateCreated DateValue="2002-01-01T00:00:00Z" />
<Summary>Some Summary description</Summary>
</ProductDescription>
</root>'
select @x.query('
for $PD in /root/ProductDescription
where xs:dateTime(data( ($PD/DateCreated/@DateValue)[1] )) < xs:dateTime("2001-01-01T00:00:00Z")
return
element Product
{
( attribute ProductID { data($PD/@ProductID ) },
attribute DateCreated { data( ($PD/DateCreated/@DateValue)[1] ) } )
}
')
이전 쿼리에서 다음을 유의하십시오.
FOR ... WHERE 루프 구조를 사용하여 WHERE 절에 지정된 조건을 만족하는 <ProductDescription> 요소를 검색합니다.
dateTime() 생성자 함수를 사용하여 제대로 비교할 수 있도록 dateTime 유형 값을 생성합니다.
그런 다음 쿼리가 결과 XML을 생성합니다. 일련의 특성을 생성하기 때문에 쉼표와 괄호가 XML 생성에 사용됩니다.
다음은 결과입니다.
<Product
ProductID="1"
DateCreated="2000-01-01T00:00:00Z"/>