SQL Server存储过程的TRY / CATCH块的位置

时间:2016-02-14 00:35:18

标签: sql-server tsql stored-procedures try-catch

我想知道TRY/CATCH对于T-SQL过程的最佳位置以及为什么

声明中:

CREATE PROCEDURE procedure_name        
AS         
BEGIN  
    -- Code 

    BEGIN TRY
        sql_statement  
    END TRY
    BEGIN CATCH
        -- Handle errors 
    END CATCH 

    --Code 
END

或致电:

BEGIN TRY
      EXEC procedure_name   
END TRY
BEGIN CATCH
      -- Handle errors 
END CATCH

1 个答案:

答案 0 :(得分:2)

我会选择第一个选项。

[
  {
    "email": "user@example.com",
    "primary": true,
    "verified": true
  }
]

原因是你想要在源头捕获错误然后采取一些适当的措施。

在第二个选项中,您会让错误冒出来,并且您将无法访问catch块中错误函数返回的所有Exact错误信息。

例如,BEGIN TRY sql_statement END TRY BEGIN CATCH -- Handle errors END CATCH 函数将返回调用包含实际sql代码的过程的调用过程的行号,您可能想知道抛出实际异常的错误行号,此信息仅在被调用过程的catch块中可用。

故事的道德是试图尽可能接近来源捕捉异常。