2013-09-05 1 views
-1

참조하는 테이블에서 FK 제약 조건 만 해제하여 상위 테이블에서자를 수 없습니다. 부모 테이블을자를 수 있도록 참조 테이블에 제약 조건을 실제로 삭제해야했습니다.SQL Server에서 FK 제약 조건을 해제 한 후에도 부모 테이블을자를 수 없습니다.

자식 테이블을 자른 후 위의 단계를 수행 했으므로 ... 올바른 순서대로 수행 했으므로 제약 조건을 삭제 한 다음 데이터를 대량 삽입 한 다음 다시 작성해야합니다. FK 제약?

+0

여기에 : stackoverflow.com/questions/159038/can-foreign-key-constraints-be-temporarily-disabled-using-t-sql – dcaswell

+0

글쎄 ... 난 그냥 하나의 FK 제약 조건을 해제하고 모두가 필요합니다. – User1

+0

ALTER TABLE MyTable NOCHECK CONSTRAINT ALL – dcaswell

답변

1

TRUNCATE을 사용하려면 예를 삭제하고 제약 조건을 다시 만드는 것이 유일한 방법입니다.

확인에 doc (자세한 설명과 함께)

당신은 FOREIGN KEY 제약 조건에 의해 참조 테이블에 TRUNCATE 테이블을 사용할 수 없습니다; 대신 WHERE 절없이 DELETE 문을 사용하십시오. TRUNCATE TABLE은 이 기록되지 않으므로 트리거를 활성화 할 수 없습니다. 자식 테이블 (또는 관련 FK 값 모두 NULL로 설정) 비어있는 경우

+0

DELETE-를 사용하여 테이블의 모든 데이터를 비우려면 먼저 FK 제약 조건을 비활성화해야합니까? – User1

+1

@ Code12 시도해 보셨습니까? –

+0

원본 테이블을 다른 이름으로 바꾸거나 (예 : 'BAK'또는 다른 접미어로) 하위 테이블을 복사 한 다음 원래 테이블의 이름으로 빈 복사본의 이름을 바꾸고 상위에서 잘라내어 제약 조건을 얻으려면 어떻게해야합니까? 간섭하지 않습니까? 그런 다음 복사 된 빈 테이블을 놓고 원본 이름을 바꿉니다. –

0

, 당신은 비활성화하거나 제약 조건을 삭제하지 않고 부모 테이블에서 DELETE 할 수 있어야한다.

그러나 제약 조건을 해제해도 자식 테이블이 비어 있더라도 TRUNCATE을 사용할 수 없습니다. 이 경우 SQL Server는 DDL 수준에서 제약 조건이 존재하는지 확인하고 제약 조건 위반에 대한 데이터 검사를 방해하기 훨씬 전에 (테이블이 비어 있지 않아도 상관 없음) 긴 시간을 기다립니다.

귀하의 경우에는 DELETE을 사용하십시오. 하루에 50,000 번하고 있지 않다면, 이것을 TRUNCATE으로 작동 시키려고하면 거의 이득을 얻지 못할 것 같습니다.

관련 문제