2008-10-23 3 views
1

eternalsaga에 SQL 스크립트에서 140 만 행의 데이터를 삽입하려면 각 스크립트 행을 개별적으로 실행하는 기본 WinForms 앱을 작성했습니다. 그러나 데이터베이스 전체에 해당하는 SET IDENTITY_INSERT OFF

, 원래 스크립트가
SET IDENTITY_INSERT [Table] OFF 

을 포함하고 SET 세션 전체의 명령이기 때문에,이 설정은 각 행이 실패하고 있음을 의미하는 모든 SQL 호출에 길을 잃지 않습니다. IDENTITY_INSERT를 데이터베이스 전체에 대해 전체 테이블에 대해 설정하는 방법이 있습니까? 실패하지 않고 이러한 개별 호출을 만들 수 있습니까? 또는 각 행에 명령을 추가하여 ID 지정을 무시하도록 말할 수 있습니까?

답변

5

BULK INSERT이 효과가 없을까요? 또는 SQL Server 가져 오기/내보내기 마법사 (here 또는 here)? 가져 오기/내보내기가 전체 가져 오기에 대한 ID 삽입을 끌 수 있음을 알고 있습니다. 나는 합법적으로 당신이 대량 삽입 이전에 그것을 할 수 있다고 확신한다.

+0

또한이 작업을 위해 특별히 설계된 bcp 유틸리티를 살펴볼 수도 있습니다. http://msdn.microsoft.com/en-us/library/ms162802.aspx bcp에서 가져온 데이터의 지정된 파일로 식별 열을 무시하는 명령 줄 옵션이 있습니다. – esarjeant

+0

필자는 SQL 스크립트를 플랫 탭으로 구분 된 파일로 변환 한 다음 bcp를 사용하여 가져 오는 작업을 완료해야했습니다. 그것이 있어야했던 것보다 훨씬 번거 롭습니다! – tags2k

0

나는 IDENTITY INSERT가 오직 한 번에 한 테이블 씩 오버라이드 될 수 있다고 생각한다.

한 번에 2 ~ 300 개의 삽입 문을 일괄 처리해야하며 각 배치 앞에 ident insert를 먼저 배치해야합니다.

때문에 응용 프로그램이 같은 블록을 실행합니다

....

SET IDENTITY_INSERT [Table] OFF; 
INSERT INTO TABLE VALUES (1, 'a'); 
INSERT INTO TABLE VALUES (2, 'b'); 
INSERT INTO TABLE VALUES (3, 'c'); 
INSERT INTO TABLE VALUES (4, 'd'); 
INSERT INTO TABLE VALUES (5, 'e'); 
SET IDENTITY_INSERT [Table] ON; 
0

아무것도 다른이 140 만 삽입 작업이 진행되는 동안 테이블에 삽입/접근 될 것입니다.

그렇다면 단순히 작업 기간 동안 PK 열의 ID를 비활성화 할 수 있습니까?

관련 문제