2016-12-15 68 views
2

我執行從SSMS一個存儲過程,我得到這個錯誤信息:如何解釋這個SQL Server錯誤消息

Msg 295, Level 16, State 3, Procedure spEdiCreateOrders, Line 80 [Batch Start Line 2] 
Conversion failed when converting character string to smalldatetime data type. 

當然,我可以嘗試和犯錯,但我希望能夠充分利用這個信息,我對這個信息有些困惑。
'line 80':從那裏開始?來自Alter procedureBEGIN條款?或者當我點擊Modify時,它是否真的指向我看到的第80行?
此外,這是什麼意思Batch Start Line 2
Thx!


編輯:請注意,我沒有興趣在解決問題(它已經解決)的幫助。我只想要一個關於如何解釋「第80行」和「批量開始第2行」的明確指導方針,以便下一次我立即知道在哪裏看。

​​

+0

我不確定您是否在嘗試弄清楚錯誤發生的原因,或者您是否清楚這一點,並且您只希望獲得有關郵件及其上下文的幫助。如果它的錯誤可能是你傳入你的存儲過程的參數值,你能檢查這個值嗎? – Igor

+0

@Igor未提供參數。我知道這個問題出現在屏幕截圖的第97行的INSERT語句中,但我會發現自己和其他人可以清楚地解釋這些錯誤消息。 –

+0

使用'print'可以將各種消息寫入輸出。之前是否有任何內容會打印自定義消息,然後在出現錯誤時再顯示,並使錯誤顯示爲錯誤的一部分? – Igor

回答

3

使用更改過程查看存儲過程的代碼時,錯誤行來自BEGIN命令,因爲過程中發生錯誤,而不是第ÈALTER PROCEDURE命令

  • BEGIN = 0行
  • 下一行(程序= 1

批次線2的實際開始意味着第二批語句 - 這意味着你必須在過程的GO的地方,這是在第二組語句(http://sqlhints.com/tag/examples-of-sql-go-statement/)中,第一組前GO

出現
1

關於Line n

N它是指考慮與它的任何空間對象的行號,或它的身體之前。

例1

假設未來是的SQLQuery窗口點擊執行spTest1SSMS

1. Create proc spTest1 

2. As 

3. Begin 

4. Select 1/0 

5. End 

新建查詢按鈕後,你會得到一個消息

消息8134,級別16,狀態1,過程spTest1,行4

例2

假設未來是的SQLQuery窗口點擊執行spTest2SSMS

1. 

2. 

3. 

4. 

5. 

6. Create proc spTest2 

7. As 

8. Begin 

9. Select 1/0 

10. End 

新建查詢按鈕後,你會得到一個消息

Msg 81 34,級別16,狀態1,過程spTest2,9號線

結論如何獲得準確數量

爲了得到準確的使用數量sp_helptext爲未來的系統存儲過程

Exec sp_helptext spName 
+0

當使用Alter命令查看過程時,您需要查看過程本身的代碼,而不是SQL Server放置的額外部分,以允許您編輯過程 – SeanC