SQL 데이터베이스 (약 200k 레코드, 7 개 열)에서 비교적 많은 양의 데이터를 가져 와서 다른 테이블에 업데이트/삽입해야하는 코드가 있습니다.SqlDataReader를 사용하여 큰 데이터 세트로 작업하기
초기 반복 작업은 SqlDataReader를 열고 반복하여 수행합니다. 데이터베이스에서 열린 트랜잭션을 보유하고있는 것처럼 보이지만 프로세스가 실행될 때까지 몇 시간 동안 잠금 문제가 발생할 수 있습니다. 데이터는 SQL 저장 프로 시저를 통해 반입되며 꽤 잘 최적화 된 것으로 확신합니다. 각 레코드의 처리는 상당히 집약적입니다.
내 의사 코드 : 나는 배열이나 목록 <>는 DB가 모든 코드를 기다리고에서 해방되는 것이 "오프라인"그래서 잡아에 SqlDataReader 개체를 넣을 수 있습니다string sql = "EXEC StoredProc"
sqlConn.Open();
SqlCommand sqlComm = new SqlCommand(sql, sqlConn);
SqlDataReader reader = sqlComm.ExecuteReader();
//loop through products
while (reader.Read())
{
// do stuff
}
사이에서 실행 수백 천 번 - 기억에 많은 양의 데이터가있을 것이므로 문제를 개선하거나 악화시킬 것인가?
정말 좋은 아이디어 인 것처럼 여기에서 많은 일이 일어나고 있습니다. 프로 시저를 통해 레코드 세트를 엽니 다. 그런 다음 거대한 레코드 세트를 반복하고 다른 테이블에 삽입하십시오. 다른 것들도 삽입하십시오. 이 엔드 투 엔드 디자인으로 올바른 결정을 내리고 있습니까? 이 레코드 세트를 반복하여 배열에 넣을 수는 있지만이 배열이 실행중인 모든 가난한 시스템에 200k 크기의 배열이 있습니다. – JNevill
나는 당신이 듣는다 - 기본적으로 나는 원래 테이블의 모든 레코드를 읽고 다른 코드를 통해 일부 값을 실행하고 새로운 값을 다른 테이블에 써야한다. 그리고이 코드를 SQL 내부에서 코드로 사용할 수 없다. 그 처리는 꽤 복잡하고 C# 코드의 덩어리입니다. 나는 작은 덩어리로 과정을 일괄 처리 할 수 있었지만 궁극적으로 나는 그것을 모두 처리해야한다고 생각한다! – chilluk
JNevill의 의견에 대한 귀하의 답변을 보았으므로 CLR 절차를 작성하여 최상의 결과를 얻을 수 있다고 덧붙일 수 있습니다. –