Как распечатать несколько строк значений XML, используя SQL - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть база данных под названием Companies. В компаниях есть таблица «Сотрудники». В Employees есть столбец, содержащий ответ XML. Столбец называется «Данные».

Ответ XML выглядит следующим образом

<Employee>
  <Tenure>7</Tenure>
  <Age>55</Age>
  <OfficesVisited>
    <int>1132</int>
    <int>3345</int>
    <int>7534</int>
</OfficesVisited>
</Employee>

Я хотел бы, чтобы мой запрос sql был распечатан:

OfficesVisited

1132

3345

7534

В настоящее время я получаю 113233457534

Я использую этот запрос sql:

use Companies
SELECT Employees.Data.query('(/Employee/OfficesVisited/int/text())') as OfficesVisited
    FROM Employees
    Where Employee.Employee_ID = 65035277

Я пытался использовать OUTER APPLY и CROSS APPLY, и я могу получить его в 3 строки, но все три строки выглядят как выше.

Может ли кто-нибудь помочь?

Спасибо!

1 Ответ

0 голосов
/ 21 апреля 2020

Пожалуйста, попробуйте следующее. В нем показано, как правильно использовать методы .nodes() и .value() XML.

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, [data] XML);
INSERT INTO @tbl ([data]) VALUES
(N'<Employee>
    <Tenure>7</Tenure>
    <Age>55</Age>
    <OfficesVisited>
        <int>1132</int>
        <int>3345</int>
        <int>7534</int>
    </OfficesVisited>
</Employee>')
, (N'<Employee>
    <Tenure>77</Tenure>
    <Age>58</Age>
    <OfficesVisited>
        <int>7777</int>
        <int>8888</int>
    </OfficesVisited>
</Employee>')
, (N'<Employee>
    <Tenure>90</Tenure>
    <Age>50</Age>
    <OfficesVisited>
        <int>1111</int>
    </OfficesVisited>
</Employee>');
-- DDL and samplex data population, end

SELECT c.value('(./text())[1]','INT') AS    OfficesVisited 
FROM @tbl AS tbl
    CROSS APPLY tbl.[data].nodes('/Employee/OfficesVisited/int') AS t(c)
WHERE id IN (1,2);

Вывод

+----------------+
| OfficesVisited |
+----------------+
|           1132 |
|           3345 |
|           7534 |
|           7777 |
|           8888 |
+----------------+
...