如何在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.
答案 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