2012-01-11 2 views
0

SQL Server Compact Edition을 사용하고 있습니다.SQL Server 데이터 정보를 빠르게 삽입 할 수 있습니까? C#

FOR 루프를 사용하여 데이터를 삽입하기위한 쿼리를 작성하므로 본격적인 SQL Server에서 3000 행을 다운로드 할 수 있습니다.

이 3000 행을 SQL Server Compact Edition에 삽입해야하며 현재 많은 시간이 소요되는 모든 행에 대해 삽입을 수행합니다. 12 테이블에 대해이 작업을 수행해야하는데 매우 오랜 시간이 걸립니다. 5 분 이내에이 작업을 수행하는 더 빠른 방법이 필요합니다 ...

삽입 방법은 알고 있습니까? SQL Server Compact에 많은 행이 있습니까?

나는 오십에서 오십 삽입 할 시도했지만 나는 오류 ...

insert into table(col1,col2) 
values (val1,valo2) ; 
insert into table(col1,col2) 
values (val1,valo2) 

나는이 삽입 (그래서 그것의 50 개 삽입 할에 대한 수있을 것하지 않음) 오류가 발생했습니다,

있어

SQL Server Compact Edition에서 OPENROWSET을 수행 할 수 있습니까?

MY QUESTION
SQL Server Compact Edition 데이터베이스에 많은 행을 삽입하려면 어떻게해야합니까? 이 데이터는 완전한 SQL Server 데이터베이스에서 가져옵니다.

+0

편집을 고려하여 모든 사고 방식을 고려할 수 있습니까? – simchona

+0

@simchona 내 질문 어떻게 SQL Compact에 많은 행을 삽입 할 수 있습니까? (내가 필요 빨리) 정보 SQL 서버 (컴팩트)와 연결 –

+1

그건 도움이되지 않습니다. – simchona

답변

2

당신은 SQL Compact에서 많은 행을 삽입하기위한 방법을 알고 있습니까?

내가 가장 좋은 방법이 생각 아래를 참조하지만, 당신은 (어떤 이유) 소스 데이터베이스가 당신이 SQL 서버에 연결된 서버를 만드는 고려할 수 SQL 서버가 마음에 들지 않는 경우 압축 데이터베이스 및 SQL Server 기록을 삽입 할 수 있습니다. 내 경험에 비추어 볼 때 SQL Server는 임의의 데이터베이스에 매우 빠르게 삽입됩니다. 은 SQL Server 데이터베이스 압축 파일에 데이터를로드 빠른 (일 대량 삽입)에 대한

SQL Compact Bulk Insert Library

.NET 라이브러리. SQLClient SqlBulkCopy API를 모방합니다. 테스트에서

어떤 타이밍 -없는 제약/인덱스로드 2 열 테이블 :

1,000,000 행 : 6초 = 166,666 행/초
5,000,000 행 : 28초 = 178,000 행/초

private static void DoBulkCopy(bool keepNulls, IDataReader reader) 
{ 
    SqlCeBulkCopyOptions options = new SqlCeBulkCopyOptions(); 
    if (keepNulls) 
    { 
     options = options |= SqlCeBulkCopyOptions.KeepNulls; 
    } 
    using (SqlCeBulkCopy bc = new SqlCeBulkCopy(connectionString, options)) 
    { 
     bc.DestinationTableName = "tblDoctor"; 
     bc.WriteToServer(reader); 
    } 
} 
+0

무엇을 의미합니까 ?? options = options | = SqlCeBulkCopyOptions.KeepNulls; –

+0

| = ??? 나는 그 코드를 한번도 본 적이 없다. –

+0

프로젝트는 자체적 인 문서를 가지고 있지만, 대체로'SqlBulkCopy' API를 모방한다. 따라서 MSDN에서 의도 한 동작을 확인할 수 있습니다. [기본값에 대한 설정에 관계없이 대상 테이블의 null 값 유지. 지정되지 않은 경우 null 값은 해당되는 경우 기본값으로 대체됩니다.] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopyoptions.aspx). –

1

일반 SQL 문을 사용하여 12 개의 테이블에 3000 행을 삽입하는 데 걸리는 시간은 1 초 미만입니다. 오류가 발생하거나 분이 걸리면 잘못된 결과가 발생합니다. 이것은 매우 기본적인 작업입니다. 오류가 발생하는 경우 잘못된 도구가 무엇인지 찾아야하며 다른 도구를 사용하지 마십시오.

C#을 사용하여 레코드를 SQL CE 데이터베이스에 삽입하는 가장 간단한 방법은 ADO.NET을 사용하는 것입니다. 다음은 매개 변수가있는 쿼리를 사용하는 예입니다.

using (var conn = new SqlCeConnection(YourCommandString)) 
{ 
    var cmd = conn.CreateCommand(); 
    cmd.CommandText = "INSERT INTO table (col1,col2) VALUES (@val1,@val2)"; 

    var param1 = cmd.CreateParameter(); 
    param1.ParameterName = "@val1"; 
    // assign col1 types, constraints, lengths here. 
    cmd.Parameters.Add(param1); 

    var param2 = cmd.CreateParameter(); 
    param2.ParameterName = "@val2"; 
    // assign col2 types, constraints, lengths here. 
    cmd.Parameters.Add(param2); 

    cmd.Prepare(); 
    conn.Open(); 
    foreach (var s in sourceDataStructure) 
    { 
     param1.Value = s.sourceValue1; 
     param2.Value = s.sourceValue2; 
     cmd.ExecuteNonQuery(); 
    } 

    cmd.Dispose(); 
} 

매개 변수화 된 쿼리가 무엇인지 모르는 경우 배우십시오.

+0

다음 행 : param1.ParameterName = "@ val2"; param2.ParameterName = "@ val2"이어야합니다. 안돼?/자극? –

+0

감사합니다. @Clay; 결정된. –

관련 문제