捕获流中的选择性异常

时间:2012-11-22 20:20:21

标签: sql-server try-catch

失败时的某些操作会产生多个异常。请考虑以下事项:

use tempdb
go
create table x (i int, s char(32))
go
create table y (a int, xi int)
go
alter table y add constraint y_xi foreign key (xi) references x(i)
go

生成:

  

Msg 1776,Level 16,State 0,Line 1没有小学或候选人   引用表'x'中与引用列匹配的键   在外键'y_xi'中列出。

     

Msg 1750,Level 16,State 0,Line 1   无法创建约束。查看以前的错误。

是一个围绕此操作包装try / catch的人,只能获取异常的 last ,而第一个实际上更感兴趣:

begin try
    alter table y add constraint y_xi foreign key (xi) references x(i)
end try
begin catch
    print error_number()
end catch
生成1750的

- 这告诉我无法创建约束但不能创建原因。 1776会更有用,但我无法弄清楚如何选择它。

任何人的想法?

TIA - e!

1 个答案:

答案 0 :(得分:0)

所以答案是无法做到的。显然,SQL Server 2012按照本文的某种方式解决了这个问题:

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/3476a931-3db7-4017-9fbe-e082f2de2cb0/sql-server-trycatch-inner-exception-message-conundrum?forum=transactsql

感谢@ user3973227指出这一点!