Access
 sql >> Datenbank >  >> RDS >> Access

Zugriff mit Microsoft SQL Server – Importieren Sie große Datensätze mit SSIS

Zugriff mit Microsoft SQL Server – Große Datensätze mit SSIS importieren

Sterben mit einer Access-Insert-Abfrage

Wenn Sie jemals versucht haben, eine große Menge an Datensätzen mithilfe einer Access-Einfügeabfrage (15.000 Datensätze oder mehr) in SQL Server einzufügen, müssen Sie lange warten (ab ein paar Minuten). bis 15). Es kann sogar dazu führen, dass Ihre Datenbank hängt, wenn der Datensatz zu groß ist. Welche Optionen haben Sie also?

XML ist ein großartiger erster Versuch

Eine der Methoden, die wir im Allgemeinen in unserem Code verwenden, ist die Arbeit mit XML-Daten, ich werde hier nicht zu sehr ins Detail gehen, aber hier ist ein Link, den ein Kollege von mir geschrieben hat. Es umfasst eine zweiteilige Serie, die die Arbeit mit XML-Daten mit einem SQL Server-Backend behandelt.

XML ist ein großartiges Tool zum Ausprobieren, aber selbst das ist bei Datensätzen mit einer Nummerierung von 10.000 möglicherweise nicht schnell genug. Der Vorteil von XML gegenüber einem SSIS-Job wäre jedoch, dass ein SSIS-Job einen Netzwerkordner benötigt, auf den alle Access-Benutzer und der Server zugreifen können. Das würde über das Internet nicht gut funktionieren (das Szenario, für das die XML-Methode ursprünglich gemacht wurde).

SSIS ist superschnell

Was ich hier mit Ihnen teilen möchte, ist meine Erfahrung in der Arbeit mit SQL Server Integration Services. Wir hatten einen Kunden, dessen Datenbank bereits die XML-Methode zum Hochladen der Daten auf den SQL-Server verwendete, aber da die importierten Daten über 700.000 Datenzeilen enthielten, dauerte es 20 Minuten, bis der Vorgang abgeschlossen war. Dies dauerte eindeutig zu lange für ein vielbeschäftigtes Unternehmen, das diese Methode täglich anwenden musste. Unsere Lösung bestand darin, Access aus dem Upload-Prozess zu entfernen, indem wir einen Job erstellten, der die CSV-Datei direkt vom Dateispeicherort liest und die Daten mithilfe eines einfachen T-SQL-Skripts in die SQL Server-Tabelle importiert.

Access startet den Prozess nur

Benutzer wählen ihre Datendatei in Access aus und geben alle anderen erforderlichen Informationen ein, z. B. ein Datum, und klicken auf die Schaltfläche „Verarbeiten“. Der erste Schritt des VBA-Codes wäre das Speichern des Dateinamens und Pfads zu einer Tabelle in SQL Server.
'Add import file name to Application
ExecuteMyCommand "UPDATE Application SET SSISDataImportFile = " & PrepareSQLString(Me.txtFileInput)

Hier ist der VBA-Code, der verwendet wird, um den SSIS-Job auszuführen.
Public Function ImportData()
On Error GoTo ImportData_Err
Dim rs As ADODB.Recordset
Dim strSQL As String

„Code zum Aktivieren des SSIS-Pakets hinzufügen
strSQL =„EXEC dbo.uspSSISFileDataImport“
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True

‘Im Folgenden wird eine Prozedur durchlaufen, um zu prüfen, ob der Job abgeschlossen ist.
strSQL =„EXEC dbo.uspSSISFileDataImportProcess“
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True

Tun bis rs.Fields(0) =4 und nicht IsNull(rs.Fields(3))
strSQL =„EXEC dbo.uspSSISFileDataImportProcess“
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True
Schleife

ImportData_Exit:
Setze rs =Nothing
Exit-Funktion

ImportData_Err:
MsgBox Err.Description
Resume ImportData_Exit
Resume ‘for debugging

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

EXECUTE 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;

AUF VERZÖGERUNG WARTEN ’00:00:03′;

SELECT @execution_id=MAX ([execution_id])
FROM [SSISDB].[internal].[executions];

SELECT
@JobStatusID =e.executable_id,
@JobStatus =e.executable_name,
@StartTime =s.start_time,
@EndTime =s.end_time
FROM SSISDB .internal.executables AS e
LEFT JOIN 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;
Diese gespeicherte Prozedur führt einen einfachen Job mit dem folgenden Design aus.

 Parameter abrufen  – Dies ist ein einfaches T-SQL-Skript, das den Dateinamen und den Pfad aus der SQL-Tabelle auswählt und die Werte den jeweiligen Parametern zuweist. WÄHLEN Sie SSISDataImportFile FROM tblApplicationSettings; Der Dateiname würde sich von Tag zu Tag unterscheiden, also war die Verwendung eines Parameters der richtige Weg, der Dateiname wird in ein ungebundenes Objekt auf dem Zugriffsformular eingegeben und dann mit VBA-Codierung in einer SQL-Tabelle gespeichert, sodass das Paket dies lesen kann aus eine SQL-Tabelle (siehe obigen Code).

Heutige Eingabe abschneiden – Ein einfaches T-SQL-Skript zum Entfernen vorhandener Daten in der temporären Importtabelle, Durchlaufen der Datensätze zum Vornehmen von Änderungen oder Aktualisierungen. Möglicherweise müssen Sie die Daten zuerst in eine temporäre Tabelle importieren, falls Sie die Daten überprüfen oder weitere Änderungen an den Daten vornehmen müssen, bevor Sie sie in der permanenten Tabelle speichern.

Datenflussaufgabe – Erklärt im folgenden Abschnitt.

 Flatfile-Quelle –  Mit den Parametern aus dem ersten Schritt kann der Job auf die Textdatei zugreifen.
Die Datei muss auf einem Netzlaufwerk oder einem Ordner abgelegt sein, auf den der Server zugreifen kann.

OLE DB-Ziel  – Dieser letzte Schritt des Jobs ist der Prozess, der die Daten in die SQL Server-Tabelle importiert. Hier identifizieren Sie die Datenbankverbindung und den Tabellennamen. Hier ordnen Sie auch die Felder aus der Textdatei den Zielfeldern in der Tabelle zu.

Schließlich habe ich die gespeicherte Prozedur erstellt, um die Ausführungs-ID zurückzugeben. Der Zweck hier ist, dass die gespeicherte Prozedur nicht beendet wird, bis der Auftrag abgeschlossen ist, wodurch verhindert wird, dass der Microsoft Access-VBA-Code fortgesetzt wird, bis der Auftrag abgeschlossen ist. Die Idee hinter dem Job ist einfach, die Daten in eine SQL Server-Tabelle zu bekommen und dort können Sie alle Änderungen an den Daten über Access vornehmen und die Daten schließlich in der permanenten Tabelle speichern.

Von 20 Minuten auf 3!

Unser Kunde war mit den Ergebnissen super zufrieden. Die Möglichkeit, die großartige Technologie von SQL Server in Verbindung mit Access zu nutzen, ermöglicht es mir, bei meiner Arbeit große Effizienzsprünge zu machen. Ich kann es kaum erwarten, dies bald wieder zu versuchen!

Begleiten Sie Susan Pyne nächsten Dienstag, den 12. Februar, wenn sie darüber spricht, wie man Spalten in SQL Server wie Kreditkarten und Sozialversicherungsnummern verschlüsselt und sie für die Anzeige in Access entschlüsselt, was sich hervorragend zum Schutz wertvoller Daten eignet! Um mehr zu erfahren, besuchen Sie bitte https://buff.ly/2I7BPii #MSAccess @MSAccess #Encryption