Access
 sql >> Baza danych >  >> RDS >> Access

Dostęp za pomocą Microsoft SQL Server — importuj duże zbiory danych za pomocą SSIS

Dostęp z Microsoft SQL Server — importuj duże zbiory danych za pomocą SSIS

Umieranie za pomocą Access Insert Query

Jeśli kiedykolwiek próbowałeś wstawić dużą liczbę rekordów do programu SQL Server za pomocą zapytania wstawiającego programu Access (15 000 rekordów lub więcej), czeka Cię długie oczekiwanie, rozmawiałeś tutaj o przerwie na kawę (od kilku minut do 15). Może nawet spowodować zawieszenie bazy danych, jeśli zestaw danych jest zbyt duży. Więc jakie masz opcje?

XML to świetna pierwsza próba

Jedną z metod, których zwykle używamy w naszym kodzie, jest praca z danymi XML, nie będę się tutaj za bardzo szczegółowo omawiał, ale oto link, który napisał mój kolega. Obejmuje on dwuczęściową serię, która omawia pracę z danymi XML z backendem SQL Server.

XML to świetne narzędzie do wypróbowania, ale nawet to może nie być wystarczająco szybkie, gdy zestawy danych są numerowane w dziesiątkach tysięcy. Jednak przewaga XML nad zadaniem SSIS polega na tym, że zadanie SSIS wymaga folderu sieciowego, do którego mogą dotrzeć wszyscy użytkownicy programu Access i serwer. To nie działałoby dobrze w Internecie (scenariusz, dla którego pierwotnie stworzono metodę XML).

SSIS jest bardzo szybki

To, czym chcę się z wami podzielić, dotyczy mojego doświadczenia w pracy z usługami SQL Server Integration Services. Mieliśmy klienta, którego baza danych używała już metody XML do przesyłania danych na serwer SQL, ale ponieważ importowane przez niego dane zawierały ponad 700 000 wierszy danych, ukończenie tego procesu zajęło 20 minut. Zajęło to zdecydowanie zbyt dużo czasu dla zapracowanej firmy, która musiała codziennie korzystać z tej metody. Nasze rozwiązanie polegało na usunięciu programu Access z procesu przesyłania poprzez utworzenie zadania, które odczytałoby plik CSV bezpośrednio z lokalizacji pliku i zaimportowało dane do tabeli SQL Server za pomocą prostego skryptu T-SQL.

Dostęp dopiero rozpoczyna proces

Użytkownicy wybiorą swój plik danych w programie Access i wprowadzą wszelkie inne wymagane informacje, takie jak data, i klikną przycisk przetwarzania. Pierwszym krokiem kodu vba byłoby przechowywanie nazwy pliku i ścieżki do tabeli w SQL Server.
'Add import file name to Application
ExecuteMyCommand "UPDATE Application SET SSISDataImportFile = " & PrepareSQLString(Me.txtFileInput)

Oto kod vba używany do wykonania zadania SSIS.
Public Function ImportData()
On Error GoTo ImportData_Err
Dim rs As ADODB.Recordset
Dim strSQL As String

„Dodaj kod, aby aktywować pakiet SSIS
strSQL =„EXEC dbo.uspSSISFileDataImport”
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True

„Poniższa pętla zapętla procedurę sprawdzającą, czy zadanie zostało ukończone.
strSQL =„EXEC dbo.uspSSISFileDataImportProcess”
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True

Wykonaj dopóki rs.Fields(0) =4 i nie jestNull(rs.Fields(3))
strSQL =“EXEC dbo.uspSSISFileDataImportProcess”
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True
Pętla

ImportData_Exit:
Ustaw rs =Nic
Funkcja wyjścia

ImportData_Err:
MsgBox Err.Description
Wznów ImportData_Exit
Wznów „do debugowania

End Function
CREATE PROCEDURE [dbo].[uspFileDataImport]
AS
BEGIN
SET NOCOUNT ON;

WYKONAJ msdb.dbo.sp_start_job @Job_name =N'SSISDataImport';

END;
CREATE PROCEDURE [dbo].[uspSSISFileDataImportProcess]
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@execution_id INT,
@JobStatusID INT,
@JobStatus Varchar(250),
@StartTime DATETIME2,
@EndTime DATETIME2;

CZEKAJ NA OPÓŹNIENIE '00:00:03′;

SELECT @execution_id=MAX ([execution_id])
FROM [SSISDB].[wewnętrzne].[wykonania];

SELECT
@JobStatusID =e.executable_id,
@JobStatus =e.executable_name,
@StartTime =s.start_time,
@EndTime =s.end_time
FROM SSISDB .internal.executables AS e
DOŁĄCZ PO LEWEJ SSISDB.internal.executable_statistics AS s
ON e.executable_id =s.executable_id AND s.execution_id =@execution_id;

SELECT @JobStatusID, @JobStatus, @StartTime, @EndTime;
END;
Ta procedura składowana uruchomi proste zadanie o następującym projekcie.

 Pobierz parametry  – Jest to prosty skrypt T-SQL, który wybiera nazwę pliku i ścieżkę z tabeli sql i przypisuje wartości do odpowiednich parametrów. WYBIERZ SSISDataImportFile FROM tblApplicationSettings; Nazwa pliku różniłaby się z dnia na dzień, więc skorzystanie z parametru było sposobem, aby przejść, nazwa pliku jest wprowadzana do niezwiązanego obiektu na formularzu dostępu, a następnie za pomocą kodowania VBA jest zapisywana do tabeli SQL, umożliwiając pakietowi odczytanie tego z tabela SQL (patrz kod powyżej).

Obetnij dzisiejsze dane wejściowe – Prosty skrypt T-SQL do usuwania wszelkich istniejących danych z tymczasowej tabeli importu, przechodzenia przez rekordy w celu wprowadzenia zmian lub aktualizacji. Być może będziesz musiał najpierw zaimportować dane do tabeli tymczasowej na wypadek, gdybyś musiał zweryfikować dane lub wprowadzić dalsze zmiany w danych przed zapisaniem w tabeli stałej.

Zadanie przepływu danych – Wyjaśniono w następnej sekcji.

 Źródło pliku płaskiego –  Używając parametrów z pierwszego kroku, zadanie może uzyskać dostęp do pliku tekstowego.
Plik musi być przechowywany na dysku sieciowym lub w folderze dostępnym dla serwera.

Miejsce docelowe OLE DB  – Ostatnim krokiem zadania jest proces importu danych do tabeli SQL Server. Tutaj określasz połączenie z bazą danych i nazwę tabeli. Jest to również miejsce, w którym zmapujesz pola z pliku tekstowego na pola docelowe w tabeli.

W końcu stworzyłem procedurę składowaną, aby zwrócić identyfikator wykonania. Celem jest to, że procedura składowana nie zostanie zakończona, dopóki zadanie nie zostanie ukończone, co uniemożliwi kontynuowanie kodu Microsoft Access VBA do czasu zakończenia zadania. Ideą tego zadania jest po prostu umieszczenie danych w tabeli SQL Server, a kiedy już się tam znajdzie, można wprowadzić dowolne modyfikacje danych za pośrednictwem programu Access i ostatecznie zapisać dane w stałej tabeli.

Od 20 minut do 3!

Nasz klient był bardzo zadowolony z wyników, możliwość wykorzystania niesamowitej technologii SQL Server w połączeniu z programem Access pozwala mi poczynić ogromne postępy w wydajności w mojej pracy, nie mogę się doczekać, aby wkrótce spróbować ponownie!

Dołącz do Susan Pyne we wtorek 12 lutego, gdy będzie omawiać szyfrowanie kolumn w SQL Server, takich jak karty kredytowe i numery ubezpieczenia społecznego, oraz jak je odszyfrować w celu wyświetlenia w programie Access, co jest doskonałym rozwiązaniem do ochrony cennych danych! Aby dowiedzieć się więcej, odwiedź https://buff.ly/2I7BPii #MSAccess @MSAccess #Encryption


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nowe funkcje Microsoft Access już na Twojej drodze!

  2. Jak wyświetlić zależności obiektów w programie Access 2016

  3. Jak naprawić „Przekroczono zasoby systemowe” podczas migracji do systemu Windows 10?

  4. Łączenie lub importowanie danych z Salesforce

  5. Szyfrowanie baz danych:3 typy i dlaczego ich potrzebujesz