我有一个启动事务的存储过程。在其中,我禁用了一些约束。我修改数据。然后启用约束。 我想要的是如果 SP 末尾的数据不一致(当然是在调用 commit 之前),则回滚。
目前,我最终运行 DBCC CHECKCONSTRAINTS 以查看损坏的内容。 但是当 DBCC CHECKCONSTRAINTS 输出任何数据时我可以回滚吗?
或者更好:如果任何约束被破坏,DBCC CHECKCONSTRAINTS 是否会引发错误?
最佳答案
当您再次启用约束时,请使用 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
关于T-SQL:DBCC CHECKCONTRAINTS 之后有什么办法回滚吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4268333/