2010-11-24 4 views
2

트랜잭션을 시작하는 저장 프로 시저가 있습니다. 그 안에는 제약 조건 중 일부가 사용되지 않습니다. 데이터를 수정합니다. 그런 다음 제약 조건을 활성화합니다. 내가 원했던 것은 데이터가 SP의 끝에서 일관성이 없으면 (물론 커밋을 호출하기 전에) 롤백하는 것입니다.T-SQL : DBCC CHECKCONTRAINTS 후에 롤백하는 방법은 무엇입니까?

현재 DBCC CHECKCONSTRAINTS를 실행하여 끝에 무슨 문제가 있는지 확인합니다. 그러나 DBCC CHECKCONSTRAINTS가 데이터를 출력 할 때 롤백 만 할 수 있습니까?

이상 : 제한 조건 중 하나라도 위반되면 DBCC CHECKCONSTRAINTS가 오류를 발생시킬 수 있습니까?

+0

나는 그것을 얻지 못한다. 제약 조건을 해제 한 다음 직접 수동으로 확인하려고하는 이유는 무엇입니까? 해당 오류를 사용하도록 설정하고 CATCH/ROLLBACK을 그대로 두십시오. –

+0

SP에서 제한을 깨는 데이터 작업을 수행하기 때문에. SP가 완료되면 모두 정상이어야합니다. – Evgenyt

+0

나는 모든 세부 사항이 없이는 말할 수 없다.하지만 잘못된 순서로 작업을하는 것처럼 들린다. –

답변

3

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 
+0

좋아요! 그것은 작동합니다. – Evgenyt

관련 문제