Самый быстрый способ скопировать данные SQL - PullRequest
3 голосов
/ 01 июля 2010

Я мог бы использовать некоторые предложения / идеи. Я написал консольное приложение, которое запрашивает все данные из таблицы в MS Access (я знаю, но я ее унаследовал) в таблицу SQL. Он запускается каждое утро как запланированное задание. Поля между двумя таблицами не идентичны. В настоящее время я выбираю все данные из таблицы MS Access, перебираю набор данных и вставляю каждую строку в таблицу SQL. Я также пишу быстрый файл журнала в процессе. Это работает, но это не быстро. Буду признателен за любые идеи, которые могут вам понадобиться для улучшения процесса. Спасибо!

Ответы [ 2 ]

4 голосов
/ 01 июля 2010

SqlBulkCopy Class

Это способ быстрее, чем отдельные insert операторы.

Вы должны увеличить свое собственное значение поля идентификатора дляосновной ключ.Чтобы сделать это, сначала возьмите последнее значение поля идентификатора, где вы остановились:

select top 1 id_customer from customers order by id_customer desc

Затем увеличивайте переменную int, пока вы просматриваете DataSet.

Или вместо этого можно использовать GUID для столбца первичного ключа .

Пример кода для использования SqlBulkCopy:

public static void BulkLoadDataTable(DataTable table, string destinationTable)
{
  using (SqlBulkCopy bulkCopy = new SqlBulkCopy(_connectionString))
  {
    bulkCopy.BulkCopyTimeout = 1200;
    bulkCopy.DestinationTableName = destinationTable;
    bulkCopy.WriteToServer(table);
  }
}

Сильно типизированный DataTable:

using System;
using System.Data;

public class CustomersDataTable : DataTable
{
  public CustomersDataTable() : base()
  {
    base.TableName = "Customers";
    Columns.Add(new DataColumn("id_customer", typeof(int)));
    Columns.Add(new DataColumn("first_name", typeof(string)));
    Columns.Add(new DataColumn("last_name", typeof(string)));
    Columns.Add(new DataColumn("active", typeof(bool)));
  }
}
1 голос
/ 01 июля 2010

Вы смотрели пакеты SSIS?Я бы посмотрел на это первым.Если у вас нет доступа к этому, посмотрите на класс SqlBulkCopy, упомянутый здесь уже.

Вы также можете использовать оператор SELECT с INSERT .

...