gpt4 book ai didi

sql-server - 在忽略 namespace 的同时查询 XML?

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

我试图在忽略命名空间的同时查询 XML,因为结果集有多个命名空间。我已经到达 DataSets 节点,但我不知道如何找出多个 DataSourceName/CommandType/CommandText。理想情况下我想要:

DataSetName   DataSourceName   CommandType      CommandText
SQLDS SQLDS StoredProcedure ReportProc_aaaaa
SQLDS SQLDS StoredProcedure ReportProc_lalala

非常感谢帮助。

DECLARE @xmltable TABLE (myxml XML)
INSERT INTO @xmltable
SELECT
'<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSources>
<DataSource Name="SQLDS">
<rd:DataSourceID>32e83b35-434d-4808-b685-ada14accd0e7</rd:DataSourceID>
<DataSourceReference>SQLDS</DataSourceReference>
</DataSource>
</DataSources>
<DataSets>
<DataSet Name="SQLDS">
<Query>
<DataSourceName>SQLDS</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>ReportProc_ServerPerformanceGroup</CommandText>
</Query>
</DataSet>
<DataSet Name="GroupDetails">
<Query>
<DataSourceName>SQLDS</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>ReportProc_lalala</CommandText>
</Query>
</DataSet>
</DataSets>
</Report>'

SELECT myxml.value('(/*:Report/*:DataSets)[1]','varchar(100)') FROM @xmltable

最佳答案

使用nodes() Method (xml Data Type)将 yoru XML 分解成行并使用 value() Method (xml Data Type)从 XML 中获取特定值。

select T1.N.value('@Name', 'nvarchar(128)') as DataSetName,
T2.N.value('(*:DataSourceName/text())[1]', 'nvarchar(128)') as DataSourceName,
T2.N.value('(*:CommandType/text())[1]', 'nvarchar(128)') as CommandType,
T2.N.value('(*:CommandText/text())[1]', 'nvarchar(max)') as CommandText
from @xmltable as T
cross apply T.myxml.nodes('/*:Report/*:DataSets/*:DataSet') as T1(N)
cross apply T1.N.nodes('*:Query') as T2(N)

SQL Fiddle

关于sql-server - 在忽略 namespace 的同时查询 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17332257/

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