Импорт набора данных в SQL Server 2008 Express - PullRequest
3 голосов
/ 20 декабря 2010

У меня очень большой набор данных, содержащий около 160 000 записей.Если я зациклюсь на наборе данных и импортирую каждую запись, это может занять около 20 минут, прежде чем весь набор данных будет импортирован в SQL Server.?

Набор данных создается из файла, который я обрабатываю, который предоставляет пользователь, затем у меня есть 1 таблица, которая называется скажем ImportTable, содержащая около 14 столбцов.Столбцы соответствуют столбцам в DataSet.

Я использую Visual Studio 2010 professional с c #.

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 20 декабря 2010

Вам следует внимательно изучить класс SqlBulkCopy .

Это компонент C # (без внешнего приложения), он принимает DataSet или DataTable в качестве входных данных и массово копирует их в SQL Server. Должно быть значительно быстрее, чем операция вставки строка за агонизирующей строкой (RBAR) ...

Еще лучше: вам даже не нужно импортировать весь набор данных в память - вы можете определить SqlDataReader для ваших базовых данных и передать его в SqlBulkCopy для чтения из SqlDataReader и массовой вставки в SQL Server.

2 голосов
/ 20 декабря 2010

Возможно, вы захотите взглянуть на утилиту командной строки bcp . Это позволяет загружать данные непосредственно из файла в таблицу в базе данных. В зависимости от того, как выглядит созданный пользователем файл, вам может потребоваться переформатировать его, но если он имеет простой формат с разделителями, вы, вероятно, можете использовать его как есть с bcp.

1 голос
/ 24 декабря 2010

Вы можете использовать make dataset xml, используя функцию DataSet.getXml.и передайте входной параметр для SP.

, например,

Create PROCEDURE dbo.MyInsertSP
(
        @strXML varchar(1000) 
)
AS
Begin
    Insert into publishers
   Select     * from OpenXml(@intPointer,'/root/publisher',2)
    With     (pub_id char(4), pub_name varchar(40), city varchar(20), 
                  state char(2),9) country varchar(20))
    exec sp_xml_removedocument @intPointer
RETURN
End

Надеюсь, это имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...