T-SQL从RDL数据中选择所有XML节点作为行
|
我正在尝试从包含XML列的表中进行SELECT。我想获取特定的节点,并为每个节点创建一行。
XML是直接从Reporting Services数据库获得的,并且包含RDL(报告)结构。我的目标是显示每个报告的所有“ 0”值。 “ 1”个节点的位置是不可预测的(它可以是XML结构中某个元素的一部分)。
以下是当前代码,但是由于某些原因,id无法正常工作:
IF object_id(\'tempdb..#c\') IS NOT NULL
DROP TABLE #c
select top 50
path as reportpath
,name as reportname
,convert(xml, convert(varbinary(max), content)) as reportxml
into
#c
from
reportserver.dbo.catalog
where
content is not null
order by creationdate desc
-----------------------------------------
DECLARE @x XML
SELECT @x =
( SELECT
[reportpath]
,[reportname]
,[reportxml].query(\'
for $a in //../Textbox
return ‹Textbox
valueX=\"{$a/Value}\"
/›
\')
FROM #c AS reports
FOR XML AUTO
)
select @x
-----------------------------------------
SELECT [reportpath] = T.Item.value(\'../@reportpath\', \'nvarchar(max)\'),
[reportname] = T.Item.value(\'../@reportname\', \'nvarchar(max)\'),
value = T.Item.value(\'@value\' , \'nvarchar(max)\')
FROM @x.nodes(\'//reports/Textbox\') AS T(Item)
下面的示例显示包含\“ Value \”的示例\“ Textbox \”:
‹RowGrouping›
‹Width›2.53968cm‹/Width›
‹DynamicRows›
‹Grouping Name=\"matrix1_OperationalWeek2\"›
‹GroupExpressions›
‹GroupExpression›=Fields!OperationalWeek.Value‹/GroupExpression›
‹/GroupExpressions›
‹/Grouping›
‹ReportItems›
‹Textbox Name=\"textbox35\"›
‹rd:DefaultName›textbox35‹/rd:DefaultName›
‹Style›
‹BackgroundColor›White‹/BackgroundColor›
‹PaddingLeft›2pt‹/PaddingLeft›
‹PaddingRight›2pt‹/PaddingRight›
‹PaddingTop›2pt‹/PaddingTop›
‹PaddingBottom›2pt‹/PaddingBottom›
‹/Style›
‹ZIndex›8‹/ZIndex›
‹Value›=Fields!OperationalWeek.Value‹/Value›
‹/Textbox›
‹/ReportItems›
‹/DynamicRows›
‹/RowGrouping›
PS:我在stackoverflow代码格式化方面遇到了一些麻烦,因此我用‹和›替换了<和>标记。对于那个很抱歉。
没有找到相关结果
已邀请:
3 个回复
挂帘妈乡
缉康怪
当应用于提供的XML文档时(添加名称空间定义以使其格式正确):
产生想要的正确结果:
因此,如果无法获得结果,则问题出在其他方面,而不是XQuery代码中。
骨酚柯