SqlBulkCopy는 외래 키 제약 조건을 어떻게 전복합니까?

foreign-keys sqlbulkcopy sql-server

문제

SqlBulkCopy를 사용하여 행 모음을 테이블에 삽입했습니다. 행에 정수 값을 설정하는 것을 잊었습니다. 누락 된 열은 다른 테이블을 참조하는 데 사용되며 외래 키 제약 조건으로 적용됩니다.

삽입 된 모든 행에 대해 최종 정수 값은 0이었고 0은 관련 테이블의 행을 식별하지 못했습니다. 값을 유효한 값으로 수정 한 다음 다시 0으로 전환하려고 시도했을 때이를 받아 들일 수 없습니다.

그래서 내 질문은 어떻게 SqlBulkCopy는 잘못된 상태로 데이터베이스를 남길 수 있습니까?

수락 된 답변

SqlBulkCopy가 데이터베이스를 유효하지 않은 상태로 남겨두기 위해 어떻게 관리합니까?

그것은 삽입하려는 테이블의 외래 키를 비활성화합니다.

예, 이것은 끔찍한 기본값입니다. 여유가 있다면 CHECK_CONSTRAINTS (또는 SqlBulkCopy CheckConstraints 옵션을 설정해야합니다.

또한 기본적으로 데이터 일관성을 위해 똑같이 끔찍한 트리거를 발생시키지 않습니다. 트리거는 이유가 있습니다.


인기 답변

기본적으로 CHECK 및 FOREIGN KEY 제약 조건은 대량 복사 작업 중에 무시됩니다. SqlBulkCopy는 SQL Server bcp 명령이 제공하는 것과 유사한 기능을 제공하는 관리되는 클래스입니다. bcp 명령에는 -h 힌트가 있으며 CHECK_CONSTRAINTS 힌트를 제공하지 않으면 대량로드 중에 CHECK 및 FOREIGN KEY 제약 조건이 무시됩니다. technet 기사에 다음과 같이 명시되어 있습니다. - http://technet.microsoft.com/en-us/library/ms162802.aspx

마찬가지로 SqlBulkCopy 클래스에는 SqlBulkCopyOptions 열거 형을 허용하는 생성자가 있습니다. 제약 조건을 확인하려면 CheckConstraints enum 옵션을 설정해야합니다. - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopyoptions(v=vs.110).aspx

다음은 제약 검사 제어에 대해 설명하는 기사입니다 - http://technet.microsoft.com/en-us/library/ms186247(v=sql.105).aspx

희망이 도움이됩니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.