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


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

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

Синтаксис


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

Аргументы

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

  • TYP
    Любой встроенный тип 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. Обзор каждого из этих столбцов см. в разделе Представление типов 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] ) } )
        }
 ')

Отметим следующие данные из предыдущего запроса:

  • Чтобы получить элемент <ProductDescription>, отвечающего условию, указанному в предложении WHERE, используется цикл FOR ... WHERE.

  • Чтобы создать значения типа dateTime, которые можно было бы сравнить должным образом, применяется функция-конструктор dateTime().

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

Результат:

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

См. также

Справочник

Основные понятия