У меня есть программа, которая читает текстовый файл для обновления/вставки строк. Я пробовал следующие методы псевдокода ниже. Все это очень медленно. Я запускаю этот код непосредственно на самом SQL Server, и для этих процессов требуется много часов для завершения...
Количество операторов update/insert находится где-то в миллионах. Каков наиболее эффективный способ запускать много операторов SQL в.net С#?
// Insert/Update while reading text file
While (reader.read)
{
sql.ExecuteNonQuery();
}
Или...
// build a list to loop through later and insert/update
While (reader.read)
{
List.Add(sql);
}
foreach(string s in sql)
{
sql.ExecuteNonQuery();
}
Или...
// Build a list and run 1000 statements at one time
While (reader.read)
{
List.Add(sql);
if(List.Count == 1000)
{
sql.ExecuteNonQuery();
}
}
Используйте класс SqlBulkCopy.
Позволяет эффективно загружать SQL Server таблицу с данными из другого источника.
Microsoft SQL Server включает популярную утилиту командной строки с именем bcp для перемещения данных из одной таблицы в другую, будь то на одном сервере или между серверами. Класс SqlBulkCopy позволяет писать управляемые кодовые решения, которые обеспечивают аналогичную функциональность.
Существуют и другие способы загрузки данных в таблицу SQL Server (например, инструкции INSERT), но SqlBulkCopy обладает значительным преимуществом по производительности. Класс SqlBulkCopy может использоваться для записи данных только в таблицы SQL Server. Однако источник данных не ограничивается SQL Server; любой источник данных может использоваться, если данные могут быть загружены в экземпляр DataTable или прочитаны с помощью экземпляра IDataReader.