如何在try catch块中获取所有状态错误

时间:2013-09-11 11:40:52

标签: sql sql-server sql-server-2008

如何在SQL Server 2008/2012中获取所有状态错误?

我在存储过程中使用Try catch块来显示错误消息,并在发生错误时返回错误消息。

我正在尝试更改与其他对象关联的一个表列,因此当我更改该列数据类型SQL Server时返回错误

  

ALTER TABLE ALTER COLUMN Abc_col1失败,因为一个或多个对象访问此列。

当我在Sql中只执行alter script时,它会给我2条错误消息,如下所示

  

Msg 5074,Level 16,State 1,Line 1
  对象'fn_Abc_state'依赖于列'Abc_col1'   Msg 4922,Level 16,State 9,Line 1
  ALTER TABLE ALTER COLUMN Abc_col1失败,因为一个或多个对象访问此列。

比较两个消息时仅状态不同

我的问题是我们如何在执行我的Sp以及状态时发生所有错误消息,如下所示

State 1 = The object 'fn_ABC_state' is dependent on column 'Abc_col1 '. 
State 9 = ALTER TABLE ALTER COLUMN Abc_col1 failed because one or more objects access this column.

1 个答案:

答案 0 :(得分:0)

您可以看到所有级别的错误消息,如:

seq_along(vector) %>% lapply(function(N)return(max(vector[1:N],na.rm=T)))

您还可以使用“THROW”关键字返回所有错误,如:

BEGIN TRY  
    --divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT ERROR_NUMBER() AS ErrorNumber  
           ,ERROR_SEVERITY() AS ErrorSeverity  
           ,ERROR_STATE() AS ErrorState  
           ,ERROR_PROCEDURE() AS ErrorProcedure  
           ,ERROR_LINE() AS ErrorLine  
           ,ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

另请注意,以下查询会返回您数据库的所有消息

BEGIN CATCH; 
   THROW;
END CATCH; 

参考1:http://www.sqlusa.com/articles2008/trycatch/ 参考2:https://itsalljustelectrons.blogspot.ca/2016/09/Enhanced-TSQL-Error-Handling-With-Extended-Events.html