2013-07-16 4 views
2

SMO Transfer Class를 사용하여 데이터베이스의 모든 테이블에 대한 데이터를 스크립팅하려고합니다. INSERT 문을 일괄 적으로 작성하려고합니다. ScriptingOptions 속성 BatchSize는 각 INSERT 문 다음에 최종 스크립트에 배치 구분 기호 "GO"가 포함되어 있으므로 무시됩니다. 아래는 내가 사용하고 코드는 다음과 같습니다ScriptingOptions.BatchSize가 적용되지 않음

so.BatchSize = 500; 
so.ScriptBatchTerminator = true; 
so.NoCommandTerminator = false; 
so.ScriptData = true; 
so.SchemaQualify = true; 
//and few other options all set to false 

... 

Transfer tData = new Transfer(sourceDb); 
tData.Options = so; 

... 

tData.CopySchema = true; 
tData.CopyData = true; 

... 

tData.EnumScriptTransfer(); 

출력 스크립트는 다음과 같다 :

INSERT INTO... 
GO 
INSERT INTO... 
GO 
INSERT INTO... 
GO 
... 

하지만 예상 출력은

INSERT INTO... 
INSERT INTO... 
INSERT INTO... 
//497 more INSERTS 
GO 
... 
+0

2008 어셈블리를 사용하고 있기 때문에 Transfer.BatchSize를 사용할 수 없습니다. –

+1

2012 어셈블리로 전환하고 Transfer.BatchSize를 사용해 보았습니다. 여기서 문제는이 속성에 지정된 값에 관계없이 항상 100 행 후 GO를 삽입한다는 것입니다. –

답변

0

SqlBulkCopy의 클래스는 또한 BatchSize에서와 BulkCopyTimeout을 가지고있다 . 내 추측은 TransferData()를 실행하는 대신 일반 텍스트로 출력하기 때문에 스크립터는 자신의 일을 수행하고 있다는 것입니다. Transfer 개체에서 TransferData()를 실행할 때 SMMS에서 Activity Monitor로 진행률을 모니터링하면 많은 작은 삽입 대신 INSERT BULK를 수행하는 것을 볼 수 있습니다.