다음을 통해 공유


생성자 함수(XQuery)

적용 대상:SQL Server

지정된 입력에서 생성자 함수는 XSD 기본 제공 또는 사용자 정의 원자성 형식의 인스턴스를 만듭니다.

구문

  
TYP($atomicvalue as xdt:anyAtomicType?  
  
) as TYP?  
  

인수

$strval
변환될 문자열입니다.

일반
모든 기본 제공 XSD 형식입니다.

설명

생성자는 기본 및 파생 원자성 XSD 형식에 대해 지원됩니다. 그러나 xdt:yearMonthDuration 및 xdt:dayTimeDuration 및 xs:QName, xs:NMTOKENxs:NOTATION을 포함하는 xs:duration의 하위 형식은 지원되지 않습니다. 연결된 스키마 컬렉션에서 사용할 수 있는 사용자 정의 원자 유형도 다음 유형으로부터 직접 또는 간접으로 파생될 수 있는 경우 사용할 수 있습니다.

지원되는 기본 유형

지원되는 기본 형식은 다음과 같습니다.

  • 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 예제를 제공합니다.

A. dateTime() XQuery 함수를 사용하여 이전 제품 설명 검색

이 예제에서는 샘플 XML 문서가 먼저 xml 형식 변수에 할당됩니다. 이 문서에는 각각 자식 요소가 포함된 세 가지 샘플 <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"/>  

참고 항목

XML 생성(XQuery)
xml 데이터 형식에 대한 XQuery 함수