T-SQL:DBCC CHECKCONTRAINTS 之后有什么办法回滚吗?

标签 t-sql transactions constraints

我有一个启动事务的存储过程。在其中,我禁用了一些约束。我修改数据。然后启用约束。 我想要的是如果 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/

相关文章:

sql-server - SQL Server 2008R2 从表到图的边

sql-server - JDBC 提交(): what happens behind the scenes?

haskell - 在 Haskell 中处理涉及 CmpNat 和单例的证明

ios - 如何使用 Storyboard在自定义 uitableview 中为 5 个 UILabel 系列提供约束?

ios - 圆形 UIButton - iPad 尺寸

sql - java.sql.SQLException : Procedure or function . ..需要参数...,但未提供

azure - 流分析: Best parameters to choose for the autopause of a day wise TUMBLINGWINDOW stream job and best trigger time to set for that function

c# - 如何在可取消的异步/等待中处理 TransactionScope?

sql - 生成唯一的字母数字 ID

java - 两次调用 Required 传播的事务函数只会产生 1 个事务(但从另一个类调用时会产生 2 个事务)