Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL-Server BulkCopy bzw. IRowsetFastLoad aus TDataSet - extrem schnell (https://www.delphipraxis.net/209140-sql-server-bulkcopy-bzw-irowsetfastload-aus-tdataset-extrem-schnell.html)

Papaschlumpf73 1. Nov 2021 13:28

Datenbank: MS SQL-Server • Version: ab 2012 • Zugriff über: ADO/OLE DB

SQL-Server BulkCopy bzw. IRowsetFastLoad aus TDataSet - extrem schnell
 
Mit der Funktion kann ich 1 Mio. Datensätze in weniger als 2 Sekunden!!! aus einem beliebigen DataSet (bei mir einfach ein TClientDataSet) in eine gleich strukturierte SQL-Server-Tabelle kopieren. Meine Beispieltabellen hatten allerdings auch nur 3 Spalten - aber immerhin.

Den Quellcode dazu habe ich hier gefunden. Ganz unten auf der Seite gibts auch einen Link zu GitHub. Wenn man die .pas-Datei einbindet, kann man einfach die folgende Prozedur benutzen - und fertig. Das Quell-Dataset muss vorher nur auf dem 1. Datensatz stehen:

Delphi-Quellcode:
procedure BulkCopy(Dataset: TDataSet; Connection: TADOConnection; const DstTableName: string);


Falls jemand Interesse hat, habe ich auch eine Version gefunden, mit der die Insert-Trigger auf dem SQL-Server ausgelöst werden.

Jetzt aber zu meinem Problem: Für den Kopiervorgang werden automatisch immer neue Verbindungen zum SQL-Server erstellt. Diese neuen Verbindungen haben für meinen Verwendungszweck jedoch zwei entscheidende Nachteile:
  1. Die Daten können nicht in einfache temporäre Tabellen #TableXYZ kopiert werden, da diese in der neuen Verbindung nicht verfügbar sind.
  2. Wenn die Insert-Berechtigung aus einer SQL-AppRole kommt, ist diese AppRole in der neuen Verbindung nicht gesetzt.
Für die SSIS gibt es den Verbindungsparameter "RetainSameConnection = TRUE". Damit wären meine Probleme gelöst. Leider habe ich keine Ahnung, wie ich das der neuen Verbindung beibringen soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz