将 XML 文件读入 SQL 服务器中的列

Reading a XML file into columns in SQL Server

这是我需要解析的 XML 输入的示例:

declare @dat XML = '
<ns:el xmlns:ns="http://dataexample/rest/entit">
 <ns:ent href="/1">a - 10</ns:ent>
 <ns:ent href="/2">b - 20</ns:ent>
 <ns:ent href="/3">c - 30</ns:ent>
 <ns:ent href="/4">d - 40</ns:ent>
 <ns:ent href="/5">e - 50</ns:ent>
</ns:el>
';

with XMLNAMESPACES('http://dataexample/rest/entit' as ns)
select b.value('(.)[1]', 'nvarchar(2000)')  as columna
from @dat.nodes('/ns:el') as a(b)

但是我的代码得到了这个:a - 10b - 20c - 30d - 40e - 50。一行,但我需要达到这个:

Ref Name
1   a- 10
2   b - 20
3   c - 30
4   d - 40
5   e - 50

我需要在查询中修改什么才能达到预期的结果。

请尝试以下操作。

将命名空间指定为 DEFAULT 可以防止 XPath 表达式中的命名空间前缀如雨后春笋般涌现。

SQL

DECLARE @dat XML = 
N'<ns:el xmlns:ns="http://dataexample/rest/entit">
 <ns:ent href="/1">a - 10</ns:ent>
 <ns:ent href="/2">b - 20</ns:ent>
 <ns:ent href="/3">c - 30</ns:ent>
 <ns:ent href="/4">d - 40</ns:ent>
 <ns:ent href="/5">e - 50</ns:ent>
</ns:el>';

;WITH XMLNAMESPACES (DEFAULT 'http://dataexample/rest/entit')
SELECT SUBSTRING(c.value('@href', 'VARCHAR(10)'), 2, 10) AS href
    , c.value('text()[1]', 'NVARCHAR(2000)') AS columna
FROM @dat.nodes('/el/ent') as t(c);

输出

+------+---------+
| href | columna |
+------+---------+
|    1 | a - 10  |
|    2 | b - 20  |
|    3 | c - 30  |
|    4 | d - 40  |
|    5 | e - 50  |
+------+---------+

你可以试试这个:

;WITH XMLNAMESPACES ('http://dataexample/rest/entit' AS ns)
SELECT TOP 4 
b.value('(.)[1]', 'varchar(50)') AS columna
FROM @dat.nodes('/ns:el/ns:ent') as a(b)

GO