T-SQL: есть ли способ откатить после DBCC CHECKCONTRAINTS? - PullRequest
2 голосов
/ 24 ноября 2010

У меня есть хранимая процедура, которая запускает транзакции. Внутри я отключаю некоторые ограничения. Я изменяю данные. А затем включите ограничения. То, что я хочу, это откат, если данные несовместимы в конце SP (перед вызовом commit конечно).

В настоящее время я запускаю DBCC CHECKCONSTRAINTS в конце, чтобы увидеть, что было сломано. Но могу ли я просто выполнить откат, когда DBCC CHECKCONSTRAINTS выводит какие-либо данные?

Или лучше: может ли DBCC CHECKCONSTRAINTS вызвать ошибку, если какое-либо из ограничений нарушено?

1 Ответ

3 голосов
/ 24 ноября 2010

Вместо использования DBCC CHECKCONSTRAINTS при повторном включении ограничений используйте параметр WITH CHECK.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...