AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL-Server BulkCopy bzw. IRowsetFastLoad aus TDataSet - extrem schnell
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-Server BulkCopy bzw. IRowsetFastLoad aus TDataSet - extrem schnell

Ein Thema von Papaschlumpf73 · begonnen am 1. Nov 2021
Antwort Antwort
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
434 Beiträge
 
Delphi 12 Athens
 
#1

SQL-Server BulkCopy bzw. IRowsetFastLoad aus TDataSet - extrem schnell

  Alt 1. Nov 2021, 14:28
Datenbank: MS SQL-Server • Version: ab 2012 • Zugriff über: ADO/OLE DB
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:

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.

Geändert von Papaschlumpf73 ( 1. Nov 2021 um 14:40 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 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