2010-06-11 22 views
7

Mam DataTable w pamięci, które należy zrzucić bezpośrednio do tabeli temp. SQL Server.Jaki jest najszybszy sposób na wprowadzenie DataTable na serwer SQL?

Po wstawieniu danych, trochę go przekształcam, a następnie wstawiam podzbiór tych rekordów do stałego stołu.

Najbardziej czasochłonną częścią tej operacji jest pobranie danych do tabeli tymczasowej.

Teraz muszę użyć tabel tymczasowych, ponieważ więcej niż jedna kopia tej aplikacji jest uruchomiona jednocześnie i potrzebuję warstwy izolacji do momentu rzeczywistego wstawienia do stałego stołu.

Jaki jest najszybszy sposób, aby wstawić luzem z C# DataTable do tabeli Temp SQL?

Nie mogę używać do tego żadnych narzędzi innych firm, ponieważ przekształcam dane w pamięci.

Moja obecna metoda jest stworzenie parametryczne SqlCommand:

INSERT INTO #table (col1, col2, ... col200) VALUES (@col1, @col2, ... @col200) 

a następnie dla każdego wiersza, jasne i ustawić parametry i wykonać.

Musi być bardziej efektywny sposób. Jestem w stanie odczytywać i zapisywać płyty na dysku w ciągu kilku sekund ...

+0

Ile wierszy znajduje się w zbiorze danych? Ile czasu zajmuje wstawienie? – shahkalpesh

+0

200000 wierszy, powyżej 45 minut. –

Odpowiedz

9

Powinieneś użyć SqlBulkCopy class.

+0

Awesome, ale czy wiesz, czy można go używać na stołach tymczasowych? –

+0

@John Gietzen - tak jak zwykle to ładuję do "prawdziwego" stołu - a potem upuść go, gdy skończysz. – AdaTheDev

+0

Cóż, jest to dość wykonalne, ale znowu istnieje około 10 kopii tej aplikacji, która może być uruchomiona jednocześnie. Czy wiesz, że kopia zbiorcza może być częścią transakcji? –

9

otrzyma dane bardzo szybko.

I blogged not that long ago jak zmaksymalizować wydajność. Niektóre statystyki i przykłady tam. Porównywałem dwie techniki, 1 używając SqlDataAdapter i 1 używając SqlBulkCopy - dolna linia była przeznaczona do wstawiania zbiorczych rekordów 100K, podejście adaptera danych zajęło ~ 25 sekund w porównaniu do jedynie ~ 0,8 s dla SqlBulkCopy.

+0

+1, ale daję akceptację SLaks, ponieważ był szybszy. Dzięki za link. –

+0

Jest szybki i dokładny, jak pocisk z karabinu snajperskiego. –

Powiązane problemy