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


Столбцы с именем XPath-функции проверки узла

Если имя столбца является одной из XPath-функций проверки узла, сопоставление содержимого производится, как указано в следующей таблице. Когда имя столбца является XPath-функцией проверки узла, содержимое сопоставляется с соответствующим узлом. Если столбец имеет SQL-тип xml, возвращается ошибка.

Имя столбца

Поведение

text()

Строковое значение столбца с именем text() добавляется в качестве текстового узла.

comment()

Строковое значение столбца с именем text() добавляется в качестве комментария XML.

node()

Для столбца с именем node() результат аналогичен результату, получаемому для столбца с символом-шаблоном (*) в качестве имени.

processing-instruction(name)

Строковое значение столбца с именем инструкции по обработке добавляется в качестве значения инструкции для целевого имени инструкции по обработке.

В следующем запросе показано использование проверочных узлов в качестве имен столбцов. При этом текстовые узлы и комментарии добавляются в результирующий XML-документ.

USE AdventureWorks2008R2;
GO
SELECT E.BusinessEntityID "@EmpID", 
        'Example of using node tests such as text(), comment(), processing-instruction()'                as "comment()",
        'Some PI'                   as "processing-instruction(PI)",
        'Employee name and address data' as "text()",
        'middle name is optional'        as "EmpName/text()",
        FirstName                        as "EmpName/First", 
        MiddleName                       as "EmpName/Middle", 
        LastName                         as "EmpName/Last",
        AddressLine1                     as "Address/AddrLine1",
        AddressLine2                     as "Address/AddrLIne2",
        City                             as "Address/City"
FROM   HumanResources.Employee AS E
INNER JOIN Person.Person AS P 
    ON P.BusinessEntityID = E.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress AS BAE
    ON BAE.BusinessEntityID = E.BusinessEntityID
INNER JOIN Person.Address AS A
    ON BAE.AddressID = A.AddressID
WHERE  E.BusinessEntityID=1
FOR XML PATH;

Результат:

<row EmpID="1">

<!—Пример использования таких проверочных узлов, как text(), comment(), processing-instruction() —>

<?PI Some PI?>

Имя сотрудника и данные адреса

<EmpName>отчество не является обязательным

<First>Ken</First>

<Last>Sanchez</Last>

</EmpName>

<Адрес>

<AddrLine1>4350 Minute Dr.</AddrLine1>

<City>Minneapolis</City>

</Address>

</row>

См. также

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