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


Функции-конструкторы (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"/>

См. также

Справочник

Применение функций XQuery к типу данных XML

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

Построение XML (XQuery)

Справка и поддержка

Получение помощи по SQL Server 2005