[英]Query to XML Node is giving me NULL Value
试图实现报表服务器中每个报表使用的存储过程。
INSERT INTO #ReportRawXML
SELECT
ItemID, RPT.[Name] AS ReportName,
CONVERT(XML, CONVERT(VARBINARY(MAX), RPT.Content)) AS XMLdata
FROM
ReportServer.dbo.[Catalog] AS RPT
WHERE
RPT.[Name] LIKE '%catalog%'
XML 样品:
<Report>
<DataSets>
<DataSet Name="DSET_ReportRepository">
<Query>
<DataSourceName>CCA_PROD</DataSourceName>
</Query>
</DataSets>
</Report>
我有一个表,其中包含我想查询的XML
列,但我得到了 NULL 回来; 我尝试了所有可能的方法,请高人指点。
SELECT
b.ItemID, b.ReportName,
n.c.value('@DataSourceName', 'VARCHAR(MAX)') AS id,
n.c.value('/DataSourceName[1]', 'VARCHAR(500)') AS DataSourceName,
n.c.value('/CommandType[1]', 'VARCHAR(100)') AS CommandType,
n.c.value('/CommandText[1]', 'VARCHAR(100)') AS CommandText
FROM
#ReportRawXML b
OUTER APPLY
b.XMLdata.nodes('/Report/DataSets/DataSet/Query') AS n(c)
问题:在上面的第 3 列中得到 NULL
您下一个问题的一些提示:
CommandType
或CommandText
</DataSet>
)。但现在你的问题:
DECLARE @mockupTable TABLE(ID INT IDENTITY, XMLdata XML);
INSERT INTO @mockupTable VALUES
(N'<Report>
<DataSets>
<DataSet Name="DSET_ReportRepository">
<Query>
<DataSourceName>CCA_PROD</DataSourceName>
</Query>
</DataSet>
</DataSets>
</Report>');
--查询
SELECT b.ID
,ds.value('(Query/DataSourceName/text())[1]', 'varchar(max)') as id
,ds.value('@Name', 'varchar(max)') as id
FROM @mockupTable b
OUTER APPLY b.XMLdata.nodes('/Report/DataSets/DataSet') as n(ds);
从 XML 中阅读您必须知道,名称前的@
表示一个属性。 要读取DataSet
的Name
属性,您需要这个,但不是在您自己尝试的DataSourceName
之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.