2012-04-13 49 views
0

正如我在文檔中所看到的,發生異常時會設置@@ Error全局變量。例如:外鍵違規等等。設置@@ Error時是否會拋出異常?

比方說,我有一個示例程序:

Create Procedure someName 
Begin 

    Insert Into something... 
    return @@Error 

End 

我想什麼時候回@@Error執行發生異常知道嗎?或者將控件加入我的C#代碼中的catch塊中? @@Error真的讓我感到困惑。如果在外鍵違反時不會拋出錯誤,那麼爲什麼我們在Sql Server中嘗試Catch?

+2

非常值得一讀:http://www.sommarskog.se/error-handling-I.html – AdaTheDev 2012-04-13 09:01:56

回答

0

是的,在T-SQL中,錯誤不會終止執行。我猜,Try-catch是在新版本中添加的,所以你可以更好地處理錯誤。

+0

那麼,如果我已經開始嘗試並結束嘗試並開始抓住......結束抓取會發生什麼?如果拋出錯誤,控制器將永遠不會到達catch塊,並在拋出錯誤後繼續執行到下一個。 – Jack 2012-04-13 08:58:42

+0

實際上,一個錯誤_can_終止執行,忽略try/catch塊,甚至在足夠嚴重的情況下終止連接。請參閱'RAISERROR'命令[here。](http://msdn.microsoft.com/en-us/library/ms178592.aspx) – Bridge 2012-04-13 09:05:42

+0

@Bridge上的文檔,他正在討論一個錯誤,如嘗試插入null置入NOT NULL字段。 Raiserror明確終止執行。 – kristianp 2012-04-13 09:09:20