2011-09-22 98 views
1

我有一個報告,我希望根據某些運行時參數與不同的數據庫服務器上的不同數據源交談。有沒有辦法在運行的基礎上設置報告連接字符串?我試圖避免使用數據處理擴展,但它是一個簡單的代理查詢似乎是唯一的方法來做到這一點。報告服務將報告連接到多個數據庫

編輯 有一種功能稱爲基於表達式的查詢字符串,它直到SQL Server 2005版本的報告服務纔出現。 http://blogs.msdn.com/b/bimusings/archive/2006/07/20/673051.aspx一個版本對我來說太晚了。

回答

0

Reporting Services最強大的功能之一就是一切都是表達式 - 包括數據集的SQL。這意味着您可以從頭開始構建SQL表達式。

我們有一張數據庫表,它們用描述和數據庫名稱來表示我們數據的不同快照。這被用作查詢來填充參數,用戶可以從中進行選擇,然後數據庫名稱插入SQL,所以你的數據集表達式如下:

="SELECT Field1, Field2, Field3 " 
&"FROM " & Parameters!Database.Value & ".dbo.MyTable " 

然後,當你需要添加另一個數據庫用戶可以從中進行選擇,只需將其添加到數據庫名稱表中,所有報告都可以立即訪問該數據。

隨着服務器應該是相似的,是這樣的:

="SELECT Field1, Field2, Field3 " 
&"FROM " & Parameters!Server.Value & "." & Parameters!Database.Value & ".dbo.MyTable " 

您可能需要設置您的目標爲具有該數據集連接到數據庫服務器上的鏈接服務器的服務器本來。

+0

「...將服務器設置爲具有數據集最初連接到的數據庫的服務器上的鏈接服務器。」 < - 這是關鍵:查詢仍在原始連接中指定的服務器上執行。這是一個很好的解決方法,但要直接回答原始問題:不,在運行時無法更改數據源。另一個解決方法是定義所有可能的數據源和適當的查詢。然後,您可以選擇顯示哪個數據集。 (其他數據集在需要顯示之前不會被執行。) –

+0

這是一個很好的解決方案,只是我在不同的服務器上有幾百個不同的數據庫。維護所有這些鏈接的服務器是很多工作。我認爲升級到SSRS 2005或更高版本,並使用基於表達式的連接字符串是解決我的問題。 – stimms

+0

對不起,我已經這麼做了很久,我只是假設SSRS一直允許這樣做。在這種情況下,我認爲解決方案是按照您的建議創建一個精簡的數據處理擴展。我們這樣做是爲了查詢我們創建的ASP.Net MVC ReST API,雖然它不是微不足道的,但它不像您想象的那麼困難,並且網絡上有一些很好的例子可幫助您入門。由於您只是將您的服務器和數據庫作爲參數傳遞,並將SQL作爲命令文本傳遞,所以它會相當簡單,並且可能是要走的路。我仍然在表中設置服務器和數據庫,以便選擇參數。 –

相關問題