SqlBulkInsert - 화재 트리거를 설정하고 제약 조건을 확인하는 방법?

ado.net sqlbulkcopy sql-server-2005

문제

제한된 권한을 가진 데이터베이스 사용자를 사용하여 C # 메서드에서 MS SQL 2005 데이터베이스로 ADO.NET 2.0 SqlBulkCopy 개체를 사용하여 대량 삽입을 수행합니다. 작업을 실행하려고하면 오류 메시지가 나타납니다.

대량 복사에 실패했습니다. 사용자에게 'theTable'테이블에 대한 ALTER TABLE 권한이 없습니다. 테이블에 트리거 또는 점검 제한 조건이 있지만 대량 복사 명령의 옵션으로 'FIRE_TRIGGERS' 또는 'CHECK_CONSTRAINTS' 대량 힌트가 지정되지 않은 경우, 대량 복사 조작의 목표 테이블에 ALTER TABLE 권한이 필요합니다.

나는 몇몇 문서를 읽고 나에게 그런 것들을 지정할 수있는 생성자를 가진 대량 복사 객체를 만들었다 :

    SqlBulkCopy bc = new SqlBulkCopy(
        System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"],
        SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints);

그러나 이것은 아무 것도 변하지 않습니다. 이전과 같은 오류 메시지가 나타납니다. 다른 SqlBulkCopyOptions 값을 사용하여 일부 값 비싸지 만 노력하지 않았습니다. 정말이게 문제를 해결할 거라 생각했는데, 뭔가 빠졌어?

테이블에 ALTER를 내 사용자에게 부여한 후 프로 시저를 테스트했는데 작업이 성공했습니다. 그러나 이것은 내 상황에 대한 선택 사항이 아닙니다.

수락 된 답변

그것을 해결! 플래그 열거 형을 다시 생각해 봐야 할 것 같습니다. 내가 그들을 ORing해야 할 때 열거 형 값을 비트 ANDing했다.

SqlBulkCopyOptions.FireTriggers & SqlBulkCopyOptions.CheckConstraints

0으로 평가됩니다 (SqlBulkCopyOptions.Default와 같습니다).

SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints

올바르게 작동하고 대량 삽입물을 완료 할 수있었습니다.


인기 답변

가능성 만, 미안해.

BULK INSERT에 대한 SQL 설명서는 ALTER TABLE이 필요한 3 가지 경우를 지정합니다. 당신은 그들 중 2 명을 열거했습니다. 필요하지 않더라도 KeepIdentity 옵션이 설정되어 있습니까?

또 다른 옵션은 테이블의 트리거가 이미 비활성화되어있어 문제가 혼란 스럽다는 것입니다. 사용 가능하게하려면 ALTER TABLE dbo.SomeTable ENABLE TRIGGER ALL 을 사용하십시오.



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