이 내 코드 내가 SqlBulkCopy의를 확인하는거야
var count = "SELECT COUNT(*) as rowcount FROM table_mysql GROUP BY id";
var countReader = Retrieve(count);
var countRows = 0;
try
{
while (countReader.Read())
{
countRows += int.Parse(countReader.GetValue(0).ToString());
}
}
catch (Exception ex)
{
Log.LogMessageToFile("Import.cs -> table_mssql: " + ex.StackTrace + " /n" + ex.Message);
}
finally
{
if (countReader != null) { countReader.Close(); _crud.close_conn(); }
}
for (var a = 0; a < countRows;)
{
var sql = "SELECT id, traffic_id, dow, uu, imps, impsuu, otsw, otsm FROM table_mysql LIMIT " + a + ", " + (a + 500) + "";
var reader = Retrieve(sql);
try
{
var builder = new StringBuilder();
builder.Append(
"SET IDENTITY_INSERT table_mssql ON;INSERT INTO table_mssql(id, traffic_id, dow, uu, imps, impsuu, otsw, otsm) VALUES ");
while (reader.Read())
{
Application.DoEvents();
try
{
builder.Append("(" + reader.GetValue(0) + ", " + reader.GetValue(1) + ", " +
reader.GetValue(2) +
", " + reader.GetValue(3) + ", " + reader.GetValue(4) +
", " + reader.GetValue(5) + ", " + reader.GetValue(6) + ", " +
reader.GetValue(7) +
"), ");
}
catch (Exception ex)
{
Log.LogMessageToFile("Import.cs -> table_mssql: " + ex.StackTrace + " /n" + ex.Message);
}
}
var sqlDB = builder.ToString(0, builder.Length - 2);
sqlDB += ";SET IDENTITY_INSERT table_mssql OFF;";
if (!InsertDB(sqlDB))
{
Log.LogMessageToFile("Import.cs -> table_mssql: No insert happend!");
}
}
catch (Exception ex)
{
Log.LogMessageToFile("Import.cs -> table_mssql: " + ex.StackTrace + " /n" + ex.Message);
return false;
}
finally
{
if (reader != null)
{
reader.Close();
_crud.close_conn();
}
}
a = a + 500;
}
다중 삽입을 처리하는 방법입니다. 어쩌면 그것은 더 나은 해결책 일 것입니다. 또한
var sql = "SET IDENTITY_INSERT table_mssql ON;"
+ "INSERT INTO table_mssql"
+ "(id, traffic_id, dow, uu, imps, impsuu, otsw, otsm)"
+ " SELECT id, traffic_id, dow, uu, imps, impsuu, otsw, otsm "
+ " FROM table_mysql;"
+ "SET IDENTITY_INSERT table_mssql OFF;";
if (!InsertDB(sqlDB))
{
Log.LogMessageToFile("Import.cs -> table_mssql: No insert happend!");
}
:
코드를 보여줄 수 있습니까? 이 오류 메시지는 행 값을 사용하는 경우에만 발생해야합니다. INSERT INTO ... VALUES (...), (...), (...) <- 3 개의 행이 있으며 제한은 1000입니다. –
삽입 쿼리 사이에 지연이 필요합니까? – nlucaroni
한 번에 한 행을 삽입하려고하십니까? 모든 삽입을 한 번에 수행하도록 저장 프로 시저를 호출하십시오 (아직 수행하지 않은 경우) – northpole