2015-11-02 62 views
0

我有一個SSRS報告,它是根據給定2個變量的存儲過程構建的。我收到的錯誤是SSRS假設列數據類型錯誤

An error has occurred during report processing. (rsProcessingAborted) 
Cannot read the next data row for the dataset Sheet2.  (rsErrorReadingNextDataRow) 
Conversion failed when converting the varchar value '.5' to data type int. 

這沒有任何意義。問題變量被存儲爲一個varchar。我不在存儲過程中進行任何類型轉換。在sql server studio中執行存儲的proc可以正常工作。在查詢設計器中,我使用存儲過程的代碼替換了存儲過程調用,並且它也可以正常工作。切換回調用存儲過程會引發相同的錯誤。

爲什麼SSRS試圖將varchar轉換爲int?如果有的話,它應該是雙重的,或者只是單獨放置它,而不是嘗試對它進行類型化。

+0

這是一個奇怪的。在Visual Studio中使用設計器時發生此錯誤嗎?我曾經看到過一些奇怪的行爲,儘管通常嘗試確定字段名稱,但在實際服務上運行時,它們從不出現。我唯一能想到的其他事情是,如果您在文本框的「格式」屬性中應用任何類型的值。 –

+0

@MartinSoles在Visual Studio和SSRS報告服務器上。這就是它引起了我的注意。 – Luminous

+0

嘗試查看報告後面的XML。字段類型包含在數據集中,但不包含在設計器中。也許它以某種方式被標記爲整數(就像報告最初開發時一樣,它是一個整數,但在存儲過程更新後現在是一個varchar)。 –

回答

0

我在查詢設計器中運行它時發現了技術細節,發現錯誤源於存儲過程,根本不涉及SSRS。當我第一次測試存儲過程時,我測試了生產版本而不是開發版本。我使用開發存儲過程來測試VS中的報告,存儲這個存儲過程的數據庫是開發數據庫。 dev服務器顯然也使用dev數據庫版本。

出於某種原因,這行代碼弄壞

CASE WHEN TN_UNPLATED_BLANK.CN_ZZ_ANGLE_TOL_MINUTES = '-32767' THEN -999999 
    ELSE TN_UNPLATED_BLANK.CN_ZZ_ANGLE_TOL_MINUTES END AS CN_ZZ_ANGLE_TOL_MINUTES, 

改變它這個修復它

CASE WHEN TN_UNPLATED_BLANK.CN_ZZ_ANGLE_TOL_MINUTES = '-32767' THEN NULL 
    ELSE TN_UNPLATED_BLANK.CN_ZZ_ANGLE_TOL_MINUTES END AS CN_ZZ_ANGLE_TOL_MINUTES, 

這是因爲如果在其他部分的返回類型強制字符串'-32767'轉換到int,然後強制.5強制轉換爲int,導致錯誤被拋出。

+1

這絕對是一個頭部劃痕。我很高興你明白了。 –