場景:大型存儲過程每年運行數千次,每週6天,每週運行一次。對於這一具體情況,我得到一個錯誤Msg 8152,Level 16,State 14,Line XXX字符串或二進制數據將被截斷
消息8152,級別16,狀態14,行114個
字符串或二進制數據將被截斷
此存儲過程是約800線的代碼,有很多參數,很多變量和很多表格。
Go
@exampleParam varchar(30)
@exampleParam datetime
DECLARE @declaredvara VARCHAR(50);
DECLARE @declaredvarb VARCHAR(50); -- where the line error is according to the printout
DECLARE @declaredvarc VARCHAR(50);
DECLARE @declaredvard VARCHAR(50); -- where line error is adjusted for comments in front of GO
BEGIN TRANS
-- some calculations (700+ lines)
COMMIT TRANS
--error catch
ROLLBACK TRANS
問題:我想知道它是否有可能獲得準確的Line error read,所以我至少可以縮小哪些表格必須檢查。此存儲過程涉及大量表格。
***這兩個聲明的變量(在調整GO之前和之後)它指向的是自重,它們是nvr使用的。
獎金信息:我運行的存儲過程中填充了params和params ='',除了日期時間。在這兩種情況下,我得到了同樣的錯誤。但是,我知道存儲過程是可行的,因爲它每天使用數千次,不會出現此錯誤。
EXEC SP '','','','','2014-11-6'
EXEC SP 'XX_XX_XX','',1,'','2014-11-6'
--both return the same error of Msg 8152, Level 16, State 14
--XX is a specific serialnum.
--However all other serialnum have no problem
編輯:DB運行SQL Server 2005 EDIT2:我使用的是SQL Server 2008中進行編輯。 - 所以調試不是一個選項
您是否將'@ declaredvarb'作爲varchar(50)與其sql服務器表等效項進行了比較?在某處你可能要放入1)超過50個字符的變量,2)列模式比數據更窄(字符串比列更大)或者3.將Unicode數據放入varchar字段。 – paqogomez 2014-11-06 23:16:14
行號只會告訴你從批處理開始的行數,所以如果你有一個'GO'(或其他的東西,如果你重新定義了你的批處理分隔符),它就是從那裏開始的行數。 – DavidG 2014-11-06 23:21:27
雙擊SSMS中的錯誤消息,它應該佔用錯誤行的位置。 – 2014-11-06 23:27:31