2012-11-30 92 views
3

在我的SSRS報告中,我有一個包含250個uniqueidentifier數據類型值的多值參數。這工作得很好,在參數下拉值的一小部分,但是當用戶選擇(全選),他們得到這個錯誤:多值參數截斷

An error occurred during local report processing. 
String or binary data would be truncated. 

每個唯一標識符字段是長36個字符,這意味着他們的250加在一起導致9000個字符的字符串。這是導致截斷髮生的原因。

我應該採取什麼方法來處理這種情況?

編輯:

存儲過程的夫婦快照:

ALTER PROCEDURE [dbo].[spReport] 
    @StartDate as datetime 
    ,@EndDate as datetime 
    ,@LocationId uniqueidentifier 
    ,@UserIds uniqueidentifier 

@UserIds是多值參數。它用於查詢的where子句中:

WHERE (U.UserId IN (@UserIds) OR @UserIds IS NULL) 
+2

這是我在SO上最狂野的行爲。我只是因爲你的暱稱而提出了你的問題 –

+0

當你在報告中選擇「全部」或者在查詢中存在問題時是否發生錯誤? –

+0

你能分享你的查詢的樣子嗎?是否有可能通過'nvarchar(xxx)'(xxx <9000)調用存儲過程?另外,您可以嘗試使用SQL事件探查器來抓取正在執行的查詢並嘗試手動執行它。 – Jeroen

回答

1

SSRS確實對多值參數的大小有限制。我不記得它是什麼,但我認爲你遠遠超過它。 (SSRS轉換的多值參數,以逗號分隔字符串替換變量名的occurances與串查詢。)

,以便在評論中提到,你有兩個問題:

  1. SP不能直接從SSRS獲取多值參數。你需要做一些操作。
  2. 您的整體參數長度。這可能需要一點創造力才能解決。一些選項:

    • 你可以提供兩種獨立的參數或在<All Users>現有參數的特殊值,然後檢查這在SP,返回在這種情況下所有值。如果查詢是直接在SSRS(而不是SP)像這樣的工作:

      ...WHERE (U.UserId in (@UserIds) OR '<All Users>' in (@UserIds)) 
      ... 
      
    • 您可以過濾在參數項目的數量,並基於前面的參數?例如讓用戶選擇日期範圍和/或部門,並且只返回與該範圍相匹配的UID?
0

另一種方法是創建一個用戶定義的表類型並使用它來代替varchar來傳入選定的值。