Поделиться через


Функции-конструкторы (XQuery)

Применимо к:SQL Server

Функции-конструкторы по указанным входным данным создают экземпляры любых встроенных атомарных типов XSD или пользовательских атомарных типов.

Синтаксис

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

Аргументы

$strval
Строка, которая будет преобразована.

ТИП
Любой встроенный тип XSD.

Замечания

Конструкторы поддерживаются и базовыми, и производными атомарными типами XSD. Однако подтипы xs:duration, которые включают xdt:yearMonthDuration и xdt:dayTimeDuration, а 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 поддерживает свертывание констант при вызове функций-конструкторов:

  • Если аргумент является строковым литералом, выражение оценивается во время компиляции. Если значение не соответствует ограничениям типа, возвращается статическая ошибка.

  • Если аргумент является литералом другого типа, выражение оценивается во время компиляции. Если значение не соответствует ограничениям типа, возвращается пустая последовательность.

Примеры

В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типа XML в базе данных AdventureWorks.

О. Использование функции 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 используется для получения <элемента ProductDescription> , удовлетворяющего условию, указанному в предложении WHERE.

  • Функция конструктора dateTime() используется для создания значений типов dateTime, чтобы их можно было сравнить соответствующим образом.

  • После этого запрос создает итоговый XML-код. Так как при этом создается последовательность атрибутов, при формировании XML-кода используются запятые и скобки.

Результат:

<Product   
   ProductID="1"   
   DateCreated="2000-01-01T00:00:00Z"/>  

См. также

Конструкторы XML (XQuery)
Функции XQuery для типа данных XML