SQL server 2005 gespeicherte Prozedurerrors – Zeilennummern stimmen nicht mit dem Management Studio überein

Ich habe eine gespeicherte Prozedur, die den folgenden Fehler aussendet.

Msg 8115, Stufe 16, Staat 2, Verfahren procPrptRiskTrendByIndustry, Zeile 33
Arithmetischer Überlauferrors, der den Ausdruck in den datatyp datetime umwandelt.

Woher weiß ich, welche Zeile der Fehler auftritt? Zeile 33 ist die offensichtliche Antwort, aber Zeile 33 in SQL server Management Studio stimmt nicht mit dem Fehler in der gespeicherten Prozedur überein.

Ich habe die gespeicherte Prozedur unten, aber meine Frage ist über die Zeilennummern nicht übereinstimmen.

ALTER PROCEDURE [dbo].[procPrptRiskTrendByIndustry] @subid INT, @portfolio VARCHAR(500), @currentDateKey INT , @priorDateKey INT , @exposureFrom INT , @exposureTo INT, @industry VARCHAR(500), @status VARCHAR(500) AS BEGIN SET NOCOUNT ON; -- Insert statements for procedure here -- Create Filter Table '##Portfolio_Filter' With data in @portfolio EXEC procCreateFilterTbl N'##Portfolio_Filter' , @portfolio; -- Create Filter Table '##Industry_Filter' With data in @industry EXEC procCreateFilterTbl N'##Industry_Filter' , @industry; -- Create Filter Table '##Status_Filter' With data in @status EXEC procCreateFilterTbl N'##Status_Filter' , @status; --- Main Query SELECT CASE WHEN naics_cd is NULL THEN 'Unclassified' ELSE naics_short + ' (' + CAST(naics_cd AS varchar(3)) + ')' END AS 'naics', SUM (CASE WHEN as_of_date=@currentDateKey THEN 1 ELSE 0 END) AS 'pop_cur', SUM (CASE WHEN as_of_date=@currentDateKey THEN ISNULL([cur_bal_member_lender], 0) ELSE 0 END)/1000 AS 'exposure_cur', SUM (CASE WHEN as_of_date=@currentDateKey THEN ISNULL([PayNet_absolutepd_4q] * [cur_bal_member_lender], 0) ELSE 0 END)/1000 AS 'expWtdPD_cur', SUM (CASE WHEN as_of_date=@priorDateKey THEN 1 ELSE 0 END) AS 'pop_pp', SUM (CASE WHEN as_of_date=@priorDateKey THEN ISNULL([cur_bal_member_lender], 0) ELSE 0 END)/1000 AS 'exposure_pp', SUM (CASE WHEN as_of_date=@priorDateKey THEN ISNULL([PayNet_absolutepd_4q] * [cur_bal_member_lender], 0) ELSE 0 END)/1000 AS 'expWtdPD_pp' FROM apd_fact INNER JOIN dbo.APD_Portfolio_Mapping AS apm ON dbo.APD_Fact.SubID = apm.SubID AND dbo.APD_Fact.Portfolio = apm.Portfolio INNER JOIN ##Portfolio_Filter AS pf ON apm.Mapped_Portfolio_ID = pf.FilterId INNER JOIN ##Industry_Filter AS inf ON apd_fact.industry_segment = inf.FilterId LEFT OUTER JOIN [naics_lookup] on LEFT([naics_code],3)=[naics_cd] INNER JOIN ( SELECT customer_number , Portfolio , CASE WHEN COUNT(*) = 2 THEN 'ACTIVE' WHEN MAX(as_of_date_key) = @currentDateKey THEN 'NEW' WHEN MAX(as_of_date_key) = @priorDateKey THEN 'CLOSED' END AS 'borrower_status' FROM APD_Fact WHERE APD_Fact.SubID = @subid AND as_of_date_key IN ( @currentDateKey, @priorDateKey) GROUP BY customer_number , Portfolio ) AS b ON APD_Fact.customer_number = b.customer_number AND APD_Fact.Portfolio = b.Portfolio INNER JOIN ##Status_Filter AS sf ON b.borrower_status = sf.FilterId WHERE APD_Fact.SubID=@subid AND as_of_date in (@currentDateKey,@priorDateKey) AND [cur_bal_member_lender] BETWEEN @exposureFrom AND @exposureTo GROUP BY naics_cd, naics_short ORDER BY 4 DESC, 7 DESC, 2 ASC ; END 

SSMS-Zeilennummern stimmen möglicherweise nicht mit der Nummer überein, die im Fehler immer zurückgegeben wird. Dies liegt daran, dass, wenn der SQL-server einen gespeicherten Proc ausführt, seine eigene Kompilierungs- und Ausführungsmethode hat, so dass die Zeilennummern auf der Grundlage der Ausführungsreihenfolge variieren. Zum Beispiel kann es einige Male die Zeilennummer der vorherigen Aussage anzeigen, aber der tatsächliche Fehler kann in der nächsten Zeile sein, wenige Male die Fehlerzeilennummer wird als die Klausel angezeigt, wo der tatsächliche Fehler in einer der Auswahl sein könnte säulen

Die meisten der timeen, beim Debuggen solcher Fehler, führen Sie den Inhalt der gespeicherten Prozedur als Block mit Debugging im SQL-server aktiviert. Dies hilft mir immer, jede Zeile im gespeicherten Proc zu überprüfen.