Я работаю над консольным приложением для вставки данных в базу данных MS SQL Server 2005. У меня есть список объектов для вставки. Здесь я использую класс Employee в качестве примера:
List<Employee> employees;
Что я могу сделать, это вставить один объект за раз, как это:
foreach (Employee item in employees)
{
string sql = @"INSERT INTO Mytable (id, name, salary)
values ('@id', '@name', '@salary')";
// replace @par with values
cmd.CommandText = sql; // cmd is IDbCommand
cmd.ExecuteNonQuery();
}
Или я могу построить запрос вставки balk следующим образом:
string sql = @"INSERT INTO MyTable (id, name, salary) ";
int count = employees.Count;
int index = 0;
foreach (Employee item in employees)
{
sql = sql + string.format(
"SELECT {0}, '{1}', {2} ",
item.ID, item.Name, item.Salary);
if ( index != (count-1) )
sql = sql + " UNION ALL ";
index++
}
cmd.CommandType = sql;
cmd.ExecuteNonQuery();
Полагаю, в последнем случае будут вставлены строки данных сразу. Однако, если у меня есть
несколько тысяч данных, есть ли предел для строки запроса SQL?
Я не уверен, что одна вставка с несколькими строками лучше, чем одна вставка с одной строкой данных, с точки зрения производительности?
Какие-нибудь предложения, чтобы сделать это лучше?