2

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

Try catch在存储过程中使用块来获取错误消息并在发生任何错误时返回错误消息。

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

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

当我在 Sql 中仅执行更改脚本时,它会给我 2 条错误消息,如下所示

消息 5074,级别 16,状态 1,第 1 行
对象“fn_Abc_state”依赖于列“Abc_col1”。
消息 4922,级别 16,状态 9,第 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.
4

1 回答 1

0

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

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  

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

BEGIN CATCH; 
   THROW;
END CATCH; 

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

SELECT * FROM sys.[messages]

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

于 2018-02-13T16:21:58.850 回答