特定の操作が失敗すると、複数の例外が生成されます。次の点を考慮してください。
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 の方がはるかに便利ですが、それを取得する方法がわかりません。
誰かアイデア?
ティア~え!