2

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

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

生成:

消息 1776,级别 16,状态 0,第 1 行被引用的表“x”中没有与外键“y_xi”中的引用列列表匹配的主键或候选键。

消息 1750,级别 16,状态 0,行 1 无法创建约束。请参阅以前的错误。

如果要围绕此操作包装 try/catch,则只能选择最后一个异常,而第一个实际上更有趣:

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!

4

1 回答 1

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 指出这一点!

于 2014-08-28T16:37:22.607 回答