在 SQL Server 中使用 OPENXML 我試圖生成一個平面表示,如下所示。
我在這里創建了一個簡單的示例來重現我的挑戰。
| 姓名 | 代碼名稱 | 序列 | 序列 | 直接的 |
|---|---|---|---|---|
| LEESA5 | YBAS | 12,30 | 12 | PUNED/BODAS/OSINA/IGDEB/LEESA |
| LEESA5 | YBAS | 12,30 | 30 | RUGMU/IGDEB/LEESA |
此處給出了 XML 示例
<HID Name="LEESA5" CodeName="YBAS" Sequences="12,30">
<Direct Sequence="12">PUNED/BODAS/OSINA/IGDEB/LEESA</Direct>
<Direct Sequence="30">RUGMU/IGDEB/LEESA</Direct>
</HID>
我使用的 SQL Server 代碼是:
declare @idoc int, @XML XML =
'<HID Name="LEESA5" CodeName="YBAS" Sequences="12,30">
<Direct Sequence="12">PUNED/BODAS/OSINA/IGDEB/LEESA</Direct>
<Direct Sequence="30">RUGMU/IGDEB/LEESA</Direct>
</HID>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @XML
select * from OPENXML(@idoc,'/HID/*')
with
(
Name varchar(10) '../@Name'
,CodeName varchar(10) '../@CodeName'
,Sequences varchar(10) '../@Sequences'
,Sequence varchar(10) '@Sequence'
,Direct varchar(100) '../Direct'
)
EXEC sp_xml_removedocument @idoc
但是,結果具有最終值重復,而不是使用來自的值
| 姓名 | 代碼名稱 | 序列 | 序列 | 直接的 |
|---|---|---|---|---|
| LEESA5 | YBAS | 12,30 | 12 | PUNED/BODAS/OSINA/IGDEB/LEESA |
| LEESA5 | YBAS | 12,30 | 30 | PUNED/BODAS/OSINA/IGDEB/LEESA |
顯然有些東西我不明白,但是經過數小時的搜索和擺弄后,我一直得到相同的結果。任何指向如何參考最終列值的指標都將不勝感激。
uj5u.com熱心網友回復:
而不是OPENXML嘗試使用 XQuery 方法,例如:
declare @XML XML =
N'<HID Name="LEESA5" CodeName="YBAS" Sequences="12,30">
<Direct Sequence="12">PUNED/BODAS/OSINA/IGDEB/LEESA</Direct>
<Direct Sequence="30">RUGMU/IGDEB/LEESA</Direct>
</HID>';
select
hid.value(N'@Name', N'varchar(10)') as [Name],
hid.value(N'@CodeName', N'varchar(10)') as [CodeName],
hid.value(N'@Sequences', N'varchar(10)') as [Sequences],
direct.value(N'@Sequence', N'varchar(10)') as [Sequence],
direct.value(N'(text())[1]', N'varchar(100)') as [Direct]
from @XML.nodes(N'/HID') x(hid)
cross apply hid.nodes(N'Direct') y(direct);
產生:
| 姓名 | 代碼名稱 | 序列 | 序列 | 直接的 |
|---|---|---|---|---|
| LEESA5 | YBAS | 12,30 | 12 | PUNED/BODAS/OSINA/IGDEB/LEESA |
| LEESA5 | YBAS | 12,30 | 30 | RUGMU/IGDEB/LEESA |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/492701.html
