我處於將Crystal報表轉換爲SSRS(Sql Server Reporting Services)的情況。SSRS:使用返回具有相同名稱的列的存儲過程報告服務
原始報告提供了存儲過程的結果,該存儲過程返回具有相同確切名稱的列。
這怎麼可能?我向你解釋:
上一位程序員做了一些可怕的黑客攻擊。它將選擇結果放入#TempTable中。
我們假設選擇塞住#TempTable確實
SELECT a,b,c INTO #TempTable FROM mytable
然後在這個存儲過程結束時返回什麼:
SELECT aliasTemp.*, a, b, c from #TempTable aliasTemp
返回的結果是
a,b,c,a,b,c
這在SQL方面是可怕的,但我不能c更改數據庫,因爲我的客戶不希望對生產環境進行任何更改。
當我嘗試爲數據源添加此存儲過程的報告中,我得到這個:
這是一個自我解釋錯誤,說,雖然報告服務嘗試檢索字段的存儲過程返回,如果發現重複的命名列,所以它不會工作。
由於報告服務,您可以使用SQL查詢或存儲過程,我因子評分可能是一個解決辦法是這樣的查詢直接進入報表作爲SQL SELECT
CREATE TABLE #tmpBus
(
a INT,
b INT,
c INT
)
INSERT INTO #tempTable
Exec StupidStoredProcedure'Params'
避免檢索到的額外列它們具有相同的名稱並且只提取前3個。但它表示提取的列與臨時表不匹配。
我該如何做到這一點?
如果你不能改變現有的存儲過程,創建一個新的(複印件),像它應該工作。轉換完成後擺脫舊的。我錯過了什麼嗎?沒有必要這麼做,或者在已經存在的地方添加另一個黑客。修理它! –
由於客戶拒絕修改數據庫/服務器端代碼,因此我無法做任何更改,否則我將修復存儲過程。 –