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