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