在不中斷執行的情況下識別錯誤
Transact- SQL中的TRY ... CATCH語句檢測並處理數據庫應用程序中的錯誤條件。 此聲明是SQL Server錯誤處理的基石,是開發健壯數據庫應用程序的重要組成部分。 TRY ... CATCH適用於從2008開始的SQL Server,Azure SQL數據庫,Azure SQL數據倉庫和並行數據倉庫。
介紹TRY..CATCH
TRY ... CATCH的工作原理是允許您指定兩個Transact-SQL語句:一個您想要“嘗試”,另一個用於“捕捉”可能出現的任何錯誤。 當SQL Server遇到TRY ... CATCH語句時,它立即執行包含在TRY子句中的語句。 如果TRY語句成功執行,則SQL Server將繼續前進。 但是,如果TRY語句生成錯誤,SQL Server將執行CATCH語句以正常處理錯誤。
基本語法採用這種形式:
BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]TRY ... CATCH示例
通過使用示例來理解這個語句的使用是最容易的。 假設您是包含名為“Employees”的表的人力資源數據庫的管理員,該表包含有關組織中每個員工的信息。 該表使用整數員工ID號作為主鍵 。 您可能會嘗試使用以下語句將新員工插入數據庫中:
INSERT INTO employees(id,first_name,last_name,extension)VALUES(12497,'Mike','Chapple',4201)在正常情況下,該語句將在Employees表中添加一行。 但是,如果數據庫中已存在ID為12497的僱員,則插入該行將違反主鍵約束並導致以下錯誤:
Msg 2627,Level 14,State 1,Line 1違反PRIMARY KEY約束'PK_employee_id'。 不能在對象'dbo.employees'中插入重複鍵。 該語句已終止。 儘管此錯誤為您提供了解決問題所需的信息,但存在兩個問題。 首先,信息是神秘的。 它包括錯誤代碼,行號和其他普通用戶無法理解的信息。 其次,更重要的是,它會導致語句中止並可能導致應用程序崩潰。
另一種方法是將該語句包裝在TRY ... CATCH語句中,如下所示:
在本例中,發生的任何錯誤都會報告給執行該命令的用戶和hr@foo.com電子郵件地址。 顯示給用戶的錯誤如下所示:
錯誤:違反PRIMARY KEY約束'PK_employee_id'。 不能在對象'dbo.employees'中插入重複鍵。 郵件排隊。最重要的是,應用程序執行正常繼續,允許程序員正常處理錯誤。 TRY ... CATCH語句的使用是主動檢測和處理SQL Server數據庫應用程序中發生的錯誤的一種很好的方法。
學習更多
如果您想了解更多關於結構化查詢語言的內容,請閱讀SQL簡介 。