gpt4 book ai didi

sql-server - 如何从 xml 节点中提取数据作为列中的表?

转载 作者:数据小太阳 更新时间:2023-10-29 02:25:27 24 4
gpt4 key购买 nike

我在 SQL Server 中有一个带有 xml 列的表,我的目标是将整个 xml 数据提取为表。

假设我的表是这样的:

CREATE TABLE Archive
(
[Id] INT IDENTITY,
[Timestamp] DATETIME,
[XmlDoc] XML,
[Description] NVARCHAR(150)
)

XmlDoc列包含这样的 XML 数据:

<Documents>
<Doc>
<DocId>11111</DocId>
<Status>1</Status>
<DocType>DriverLicense</DocType>
<ValidDate>2022-12-31</ValidDate>
</Doc>
<Doc>
<DocId>22222</DocId>
<Status>1</Status>
<DocType>DriverLicense</DocType>
<ValidDate>2022-07-16</ValidDate>
</Doc>
<Doc>
<DocId>33333</DocId>
<Status>2</Status>
<DocType>DriverLicense</DocType>
<ValidDate>2018-11-02</ValidDate>
</Doc>
</Documents>

我需要这样的表:

screenshot

我试过类似的东西

SELECT  
XmlDoc.value('(/Documents/Doc/DocID)[1]', 'int') as [DocID],
XmlDoc.value('(/Documents/Doc/Status)[1]', 'int') as [Status],
XmlDoc.value('(/Documents/Doc/DocType)[1]', 'nvarchar(30)') as [DocType],
XmlDoc.value('(/Documents/Doc/ValidDate)[1]', 'datetime') as [ValidDate]
FROM
dbo.Archive

但它只返回第一个 <Doc>每个xml的节点。

是否可以将每个 Doc 节点作为单独的行获取?

最佳答案

既然没人回答我的问题,我就自己想办法。您只需要交叉应用

SELECT 
a.b.value('(DocId)[1]', 'int') as 'id',
a.b.value('(Status)[1]', 'int') as 'Status',
a.b.value('(DocType)[1]', 'varchar(20)') as 'DocType',
a.b.value('(ValidDate)[1]', 'varchar(20)') as 'ValidDate'
FROM
dbo.Archive r
CROSS APPLY r.XmlDoc.nodes('/Documents/Doc') a(b)

也许它会对某人有所帮助。

关于sql-server - 如何从 xml 节点中提取数据作为列中的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56823845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com