Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:SQL Server
Возвращает значение $arg , представленное в виде строки.
Синтаксис
fn:string() as xs:string
fn:string($arg as item()?) as xs:string
Аргументы
$arg
Узел или атомарное значение.
Замечания
Если $arg пустая последовательность, возвращается строка нулевой длины.
Если $arg является узлом, функция возвращает строковое значение узла, полученного с помощью метода доступа со строковым значением. Это определено в спецификации W3C XQuery 1.0 и XPath 2.0 Data Model.
Если $arg является атомарным значением, функция возвращает ту же строку, которая возвращается приведением выражений, как
xs:string$arg, за исключением случаев, когда указано в противном случае.Если тип $arg равен
xs:anyURI, универсальный код ресурса (URI) преобразуется в строку без экранирования специальных символов.В этой реализации
fn:string()без аргумента можно использовать только в контексте предиката, зависящей от контекста. В частности, его можно использовать только в квадратных скобках ([ ]).
Примеры
В этой статье приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типов XML в базе данных AdventureWorks.
А. Использование строковой функции
Следующий запрос извлекает дочерний <Features> узел <ProductDescription> элемента.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/PD:ProductDescription/PD:Features
')
FROM Production.ProductModel
WHERE ProductModelID = 19;
Ниже приведен частичный результат:
<PD:Features xmlns:PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
These are the product highlights.
<p1:Warranty xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<p1:WarrantyPeriod>3 years</p1:WarrantyPeriod>
<p1:Description>parts and labor</p1:Description>
</p1:Warranty>
...
</PD:Features>
Если указать функцию string() , вы получите строковое значение указанного узла.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
string(/PD:ProductDescription[1]/PD:Features[1])
')
FROM Production.ProductModel
WHERE ProductModelID = 19;
Вот частичный результат.
These are the product highlights.
3 yearsparts and labor...
B. Использование строковой функции на различных узлах
В следующем примере экземпляр XML назначается переменной типа xml. Запросы указываются для иллюстрации результата применения string() к различным узлам.
DECLARE @x AS XML;
SET @x = '<?xml version="1.0" encoding="UTF-8" ?>
<!-- This is a comment -->
<root>
<a>10</a>
just text
<b attr="x">20</b>
</root>
';
Следующий запрос получает строковое значение узла документов. Это значение формируется сцеплением строкового значения всех текстовых узлов, являющихся его потомками.
SELECT @x.query('string(/)');
Ниже приведен результат:
This is a comment 10
just text
20
Следующий запрос пытается получить строковое значение узла инструкции по обработке. Результатом является пустая последовательность, так как она не содержит текстовый узел.
SELECT @x.query('string(/processing-instruction()[1])');
Следующий запрос получает строковое значение узла комментариев и возвращается текстовый узел.
SELECT @x.query('string(/comment()[1])');
Ниже приведен результат:
This is a comment