Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:SQL Server
Принимает от нуля и более строк и возвращает строку, содержащую результат сцепления переданных аргументов.
Синтаксис
fn:concat ($string as xs:string?
,$string as xs:string?
[, ...]) as xs:string
Аргументы
$string
Необязательная строка для сцепления.
Замечания
Функции требуется как минимум два аргумента. Если в качестве аргумента передана пустая последовательность, она трактуется как строка нулевой длины.
Дополнительные символы (суррогатные пары)
Поведение суррогатных пар в функциях XQuery зависит от уровня совместимости базы данных и, в некоторых случаях, от URI-кода пространства имен по умолчанию для функций. Дополнительные сведения см. в разделе "Функции XQuery с суррогатной поддержкой" статьи "Критические изменения функций ядро СУБД в SQL Server 2016". Дополнительные сведения см. в разделе ALTER DATABASE Compatibility Level (Transact-SQL) и Параметры сортировки и Поддержка Юникода.
Примеры
В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типов XML в примере базы данных AdventureWorks.
А. Применение функции concat() языка XQuery для объединения строк
Для указанного изделия запрос возвращает строку, полученную сцеплением гарантийного строка и гарантийных обязательств. В документе <Warranty> описания каталога элемент состоит из дочерних<WarrantyPeriod> элементов.<Description>
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
<Product
ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"
ProductModelName = "{ sql:column("PD.Name") }" >
{
concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))
}
</Product>
') as Result
FROM Production.ProductModel PD
WHERE PD.ProductModelID=28
Обратите внимание на следующие данные из предыдущего запроса:
В предложении SELECT CatalogDescription — это столбец типа XML . Поэтому используется метод query() (тип данных XML), Instructions.query(). Инструкция XQuery задана как аргумент метода query.
Запрос к документу выполняется при использовании пространства имен, Поэтому ключевое слово пространства имен используется для определения префикса пространства имен. Дополнительные сведения см. в разделе XQuery Prolog.
Результат:
<Product ProductModelID="28" ProductModelName="Road-450">1 year-parts and labor</Product>
Приведенный запрос получает сведения об указанном изделии. Следующий запрос получает те же сведения по всем изделиям, для которых имеются описания каталога XML. Метод exist() типа данных XML в предложении WHERE возвращает значение True, если XML-документ в строках имеет<ProductDescription>элемент.
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
<Product
ProductModelID= "{ (/pd:ProductDescription/@ProductModelID)[1] }"
ProductName = "{ sql:column("PD.Name") }" >
{
concat( string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:WarrantyPeriod)[1]), "-",
string((/pd:ProductDescription/pd:Features/wm:Warranty/wm:Description)[1]))
}
</Product>
') as Result
FROM Production.ProductModel PD
WHERE CatalogDescription.exist('//pd:ProductDescription ') = 1
Обратите внимание, что логическое значение, возвращаемое методом exist() типа XML, сравнивается с 1.
Ограничения реализации
Существуют следующие ограничения:
- Функция concat() в SQL Server принимает только значения типа xs:string. Все остальные значения должны быть явно приведены в xs:string или xdt:untypedAtomic.