Sql-Server

如何從 ReportServer..Subscriptions.MatchData 查詢 EndDate 值

  • October 7, 2016

在 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('http://schemas.microsoft.com/sqlserver/2006/03/15/reporting/reportingservices' as rs)
SELECT
[Description]
,m.value('rs:StartDateTime[1]','varchar(30)') AS StartDateTime
,m.value('rs:EndDate[1]','varchar(30)') AS EndDate
FROM
(
   SELECT
   [description],
   CAST(MatchData AS XML) AS MatchData
   FROM ReportServer.dbo.Subscriptions
) AS P
CROSS APPLY MatchData.nodes('/ScheduleDefinition') x(m)

WITH XMLNAMESPACES子句的 SQL BOL 參考:

http://msdn.microsoft.com/en-us/library/ms177400.aspx

引用自:https://dba.stackexchange.com/questions/17538