문제

엔터프라이즈 관리자가 생성 한 일부 스크립트* (또는 중요하지 않음)이 확인 제약 조건을 생성 한 것 같습니다. Nocheck과 함께.

이제 누군가가 테이블을 수정하면 SQL Server가 실패한 점검 제약을 통해 걸려 넘어지고 있습니다, 그리고 던지기 오류.

SQL이 모든 수표 제약 조건을 통해 확인하고 확인할 수 있습니까?

달리기:

sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

이전에 비활성화 된 확인 제약 조건 만 활성화하면 실제로 확인하지 않습니다.

각주

* SQL Server 2000

도움이 되었습니까?

해결책

All_constraints를 통한 DBCC CheckConstraints 실제로 당신의 제약을 신뢰하지 않을 것입니다. 제약 조건을 위반하는 행을보고합니다. 실제로 모든 제약을 신뢰할 수 있도록 다음을 수행 할 수 있습니다.

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS --This reports any data that violates constraints.

--This reports all constraints that are not trusted
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled  
FROM sys.check_constraints 
WHERE is_not_trusted = 1
UNION ALL
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled  
FROM sys.foreign_keys
WHERE is_not_trusted = 1
ORDER BY table_name

SQL Server 2000에서는 다음과 같은 신뢰할 수없는 제약 조건을 찾을 수 있습니다.

--Reports all constraints that are not trusted (SQL 2000)
SELECT name, type, status,
    (status & 2048) AS IsTrusted,
    (status & 256) AS IsEnabled,
    OBJECTPROPERTY(id,'CnstIsNotTrusted') as is_not_trusted,
    OBJECTPROPERTY(id,'CnstIsDisabled') as is_disabled
FROM sysobjects 
WHERE type IN ('C', 'F') --C=Constraint, F=Foreign Key
AND OBJECTPROPERTY(id,'CnstIsNotTrusted') <> 0
AND OBJECTPROPERTY(id,'CnstIsDisabled') = 0

그런 다음 제약 조건을 다시 확인합니다 수표로:

--This makes all constraints trusted
-- but first anything reported by DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS must be fixed.
exec sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'

메모: 마지막 진술에서 WITH CHECK CHECK 오타가 아닙니다. "확인"은 모든 테이블 데이터를 확인하여 위반이 없는지 확인하고 제약 조건을 신뢰할 수 있으며, 수표는 제약 조건이 활성화되어 있는지 확인합니다.

또한보십시오:http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints.aspx

http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints-and-performance.aspx

다른 팁

그것을 발견:

제약 조건이 활성화되어 있는지 여부에 관계없이 현재 데이터베이스의 모든 테이블에 대한 모든 제약 조건을 확인합니다.

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS

활성화 된 제약 조건 만 확인하려면 다음과 같습니다.

DBCC CHECKCONSTRAINTS

이 작업을 수행:

ALTER TABLE dbo.Test
      WITH CHECK CHECK CONSTRAINT CK_Test;

설명: 당신은 당신의 제약을 믿을 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top