T-SQL:在DBCC CHECKCONTRAINTS后回滚的任何方法?

时间:2010-11-24 15:15:55

标签: tsql transactions constraints

我有一个启动事务的存储过程。在其中,我禁用了一些约束。我修改了数据。然后启用约束。 我想要的是回滚如果数据在SP的末尾不一致(当然在调用提交之前)。

目前我最后运行DBCC CHECKCONSTRAINTS以查看损坏情况。 但是,当DBCC CHECKCONSTRAINTS输出任何数据时,我可以回滚吗?

或更好:如果任何约束被破坏,DBCC CHECKCONSTRAINTS是否会引发错误?

1 个答案:

答案 0 :(得分:3)

当您再次启用约束时,请使用WITH CHECK选项,而不是使用DBCC CHECKCONSTRAINTS。

ALTER TABLE YourTable WITH CHECK CHECK CONSTRAINT YourConstraint;

如果存在违规行为,您将收到如下错误:

Msg 547, Level 16, State 0, Line 15
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "YourConstraint". The conflict occurred in database "YourDatabase", table "YourTable", column 'YourColumn'.

使用下面的示例代码进行简单演示。

use tempdb
go

create table a (
    id int primary key
)

create table b (
    id int
) 

alter table b add constraint x foreign key (id) references a(id)

alter table b nocheck constraint x

insert into b (id) values (1)

alter table b with check check constraint x
go

drop table b
drop table a
go