2012-09-13 43 views
6

我一直在尋找並嘗試幾個小時才能獲得一個查詢,該查詢使用參數和它們的值爲SSRS serv提供所有當前訂閱,以便可以在新的服務器(修剪後)。通過參數查詢獲取所有SSRS訂閱的列表

例如一個簡單的報告可能是HoursByDepartment帶有三個PARAMS:

@From =Today - 7 days (Default) 
@To = Today (Default) 
@Dept = 2 (part of subscription) 

我想要得到的是沿着這些線路的東西(什麼會讓我創建報告)

Report   ParamName ParamValue Default 
HoursByDepartment From  Today-7days True 
HoursByDepartment To   Today   True 
HoursByDepartment Dept  2    False 

OR

Report    Param1Name Param1Value Param1Def Param2Name Param2Value Param2Def  
HoursByDepartment From   Today-7days True  To   Today   True 

我和XSL還不錯,所以如果我能得到的東西LIK e,我可以使用它:

<subid> 
    <report> 
     <ParameterValues> 
      <ParameterValue> 
       <Name>MinAvailable</Name> 
       <Value>10000</Value> 
      </ParameterValue> 
      <ParameterValue> 
       <Name>OwnerIDs</Name> 
       <Value>0</Value> 
      </ParameterValue> 
      <ParameterValue> 
       <Name>ShowCosts</Name> 
       <Value>False</Value> 
      </ParameterValue> 
      <ParameterValue> 
       <Name>MinValue</Name> 
       <Value>0</Value> 
      </ParameterValue> 
     </ParameterValues> 
    </report> 
</subid> 

回答

4

這個腳本應該爲你帶來一個好的開始。此查詢將針對每個報表訂閱的每個參數返回一行,或者針對不使用參數的訂閱僅返回一行。如果您的首選項是改變它,您可能需要重新編寫腳本才能以xml格式獲取它。

這是從Listing Subscribed SSRS Reports including Parameters & their Values導出(不知道有多少原來的我變了,如果有的話)。

WITH 
[Sub_Parameters] AS 
(
SELECT 
[SubscriptionID], 
[Parameters] = CONVERT(XML,a.[Parameters]) 
FROM [Subscriptions] a 
), 
[MySubscriptions] AS 
(
SELECT DISTINCT 
[SubscriptionID], 
[ParameterName] = QUOTENAME(p.value('(Name)[1]', 'nvarchar(max)')), 
[ParameterValue] = p.value('(Value)[1]', 'nvarchar(max)') 
FROM 
[Sub_Parameters] a 
CROSS APPLY [Parameters].nodes('/ParameterValues/ParameterValue') t(p) 
), 
[SubscriptionsAnalysis] AS 
(
SELECT 
a.[SubscriptionID], 
a.[ParameterName], 
[ParameterValue] = 
(SELECT 
STUFF(( 
SELECT [ParameterValue] + ', ' as [text()] 
FROM [MySubscriptions] 
WHERE 
[SubscriptionID] = a.[SubscriptionID] 
AND [ParameterName] = a.[ParameterName] 
FOR XML PATH('') 
),1, 0, '') 
+'') 
FROM [MySubscriptions] a 
GROUP BY a.[SubscriptionID],a.[ParameterName] 
) 
SELECT 
a.[SubscriptionID], 
c.[UserName] AS Owner, 
b.Name, 
b.Path, 
a.[Locale], 
a.[InactiveFlags], 
d.[UserName] AS Modified_by, 
a.[ModifiedDate], 
a.[Description], 
a.[LastStatus], 
a.[EventType], 
a.[LastRunTime], 
a.[DeliveryExtension], 
a.[Version], 
e.[ParameterName], 
LEFT(e.[ParameterValue],LEN(e.[ParameterValue])-1) as [ParameterValue], 
SUBSTRING(b.PATH,2,LEN(b.PATH)-(CHARINDEX('/',REVERSE(b.PATH))+1)) AS ProjectName 
FROM 
[Subscriptions] a 
INNER JOIN [Catalog] AS b 
ON a.[Report_OID] = b.[ItemID] 
LEFT OUTER JOIN [Users] AS c 
ON a.[OwnerID] = c.[UserID] 
LEFT OUTER JOIN [Users] AS d 
ON a.MODIFIEDBYID = d.Userid 
LEFT OUTER JOIN [SubscriptionsAnalysis] AS e 
ON a.SubscriptionID = e.SubscriptionID; 

但是,如果這是升級2005年至2008年,你可能要考慮using this tool 。如果要從此服務器中刪除SSRS並使用相同版本移動到其他服務器,最好將整個reportserver和reportservertempdb數據庫移動爲explained by Microsoft here

+0

謝謝dev_etter,對於ssrs訂閱,查詢是非常強大的,仍然修改參數...但是再次感謝... – Bharat

+0

@Bharat你是否已經想出了用於獲取帶有值的params列表的查詢這個問題。我也在尋找相同的,這將是很好,如果你在這裏分享它作爲一個答案[因爲這個線程還沒有任何答案] –

+0

@JibinMathew:是的,但我有限的要求在那個時候,找到我的答案在這裏:https://stackoverflow.com/questions/36495578​​/how-to-get-all-ssrs-subscription-data-using-stored-procedure/36495756#36495756 – Bharat

相關問題