在 SQL 2008 R2 中,我将一些关于 SSRS 元数据的管理查询放在一起,以检查正确的配置和其他类型的主动事项。
在查询 ReportServer 数据库时,我成功地检查了报告、共享数据源等。我遇到的一Subscriptions.MatchData
件事是查询列中的任何值。该列中的所有内容都返回为 NULL(除非我返回该列的全部内容)。
具体来说,我需要EndDate
. 我尝试了许多调整都无济于事,包括玩弄 XPath、XMLNamespace 等。我找到了这个基本示例,说明它在 2005 年应该如何工作。2008 年有什么不同,这不起作用?以及如何在 2008 R2 中查询此值?
`
SELECT
[Description]
,x.m.value('StartDateTime[1]','varchar(30)') AS StartDateTime
,x.m.value('EndDate[1]','varchar(10)') AS EndDate
FROM
(
SELECT
[description]
,CAST(MatchData AS XML) AS MatchData
FROM ReportServer.dbo.Subscriptions
) AS P
CROSS APPLY MatchData.nodes('//ScheduleDefinition') x(m)
`
让它失望的是标签中的 XML 名称空间。要解决这个问题,您需要使用该
with XMLNameSpaces
子句。试试这个查询。我已经在测试实例(2008,而不是 2008 r2)上对此进行了测试,因此您可能需要更改实际的命名空间定义以匹配您的 xml 数据。
WITH XMLNAMESPACES
子句的 SQL BOL 参考:http://msdn.microsoft.com/en-us/library/ms177400.aspx