0

我有一個data_source從查詢返回2行,其中一個字符串帶有8chars,另一個帶有11chars。我真的確定其中一個字符串有8個字符,因爲我明確地把它放在where條件中(類似這樣的地方,其中name ='ftcc_ppp')。事實是報告服務正在添加一些額外的空白字符並且正在修復將字符串的長度設置爲max(不帶where條件的所有結果集的長度字符串)。Reporting Services - 使用UNION ALL更改字符串長度T-SQL

我想做一些過濾器,結果錯了,因爲字符串不是8字符,而是11字符(8 + 3blank)。

where條件是在子查詢中完成的,該查詢在該字段中有一行8字符,另一行有11個字符(ftcc_ppp和ftcc_ppp_lx)。

爲什麼報告服務就像這樣?任何解釋?

謝謝大家

編輯:查詢代碼:

BEGIN 

DECLARE @dtDate DATETIME 
DECLARE @lastDay DATE; 
DECLARE @firstDay DATE; 
DECLARE @currentDate DATE; 
DECLARE @month_table AS TABLE(DATA DATE); 

SET @dtDate  = @DATA; 
SET @lastDay = CAST(DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dtDate)+1,0)) AS DATE) 
SET @firstDay = DATEADD(d,-DAY(@dtDate)+1,@dtDate); 
SET @currentDate = @firstDay; 

WHILE @currentDate <> dateadd(d,1,@lastDay) 
BEGIN 
     PRINT @currentDate; 
     INSERT INTO @month_table VALUES(@currentDate); 
     SET @currentDate = dateadd(d,1,@currentDate); 
END 

     SELECT * FROM (

     SELECT DATA,motivo,SUM(total) AS total,CAST(campanha AS VARCHAR(11)) AS campanha,[TYPE] 
     FROM [Client].[dbo].[ftcc_ppp_motivo_nelegivel_totais] 
     GROUP BY DATA,motivo,campanha,[TYPE] 

     UNION ALL  

     SELECT DATA,motivo,0 AS total,CAST('ftcc_ppp' AS VARCHAR(11)) campanha,'LOP' AS [TYPE] 
     FROM @month_table 
     CROSS JOIN dbo.ftcc_ppp_motivo_nelegivel_keys 

     UNION ALL 
     SELECT DATA,motivo,0 AS total,CAST('ftcc_ppp' AS VARCHAR(11)) campanha,'ALOP' AS [TYPE] 
     FROM @month_table 
     CROSS JOIN dbo.ftcc_ppp_motivo_nelegivel_keys 

     UNION ALL 
     SELECT DATA,motivo,0 AS total,CAST('ftcc_ppp_lx' AS VARCHAR(11)) campanha,'CARD' AS [TYPE] 
     FROM @month_table 
     CROSS JOIN dbo.ftcc_ppp_motivo_nelegivel_keys 
    ) xpto 
     WHERE campanha = 'ftcc_ppp' 


END 
+1

這對我沒有意義。你能發佈一些代碼,特別是你的查詢嗎?我懷疑你的SQL查詢正在改變這個長度。將'LEN(FieldName)'添加到您的SQL查詢中以查看SQL是否認爲這些長度不同。我沒有看到SSRS將字符附加到字符串。 – 2012-01-05 21:32:38

+0

是的,我可以提供完整的代碼。我現在檢測到的奇怪的事情是,從sqlserver返回的len總是8,但是如果我在報告服務表達式中使用len,它有時會給我8和其他時間11. 源代碼:[link](http:// pastebin .com/Ekq0qxh4) – MrKudz 2012-01-05 22:39:37

+0

如果您將'SELECT * FROM'更改爲'SELECT xpto。*,rtrim(campanha)campanha_rt FROM',那麼SSRS中'campanha_rt'的長度是多少? – 2012-01-06 09:28:07

回答

0

我發現這個問題! :) :)

問題出在硬編碼字符串。 顯然硬編碼的字符串是一個字符類型。所以我有一個字符8加一個字符與11.

結果顯而易見是11個字符。

在SQL SERVER中使用len()我無法找到插入的空格,因爲SQLSERVER會自動刪除空白字符。在SQL SERVER中編輯行時,光標顯示空白。很好的教訓:)

謝謝大家給我的問題的時間。

這是第一次使用StackOverflow的樂趣。

謝謝大家。 問候。

0

另一個可能的原因:檢查您的數據庫兼容性級別。如果設置爲80,則可能有問題,但90(或更高?)您不會。

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

的一個可變長度列的UNION和固定長度列 產生一個固定長度的柱。