Vorschlag für den Import von Massendaten

8

Wir arbeiten an einem Projekt, für das täglich Daten aus einer Excel-Tabelle importiert werden müssen. Die Daten werden aus einer vordefinierten Vorlage importiert und was wir denken, zuerst laden wir Daten in eine temporäre Tabelle hoch und führen einen Reinigungsvorgang durch (Entfernen unnötiger Informationen, Hinzufügen neuer Zeilen in der übergeordneten Tabelle und Abrufen ihrer FK usw.).

  • Ich muss wissen, ob es ein Tool oder Dienstprogramm gibt, das unseren Aufwand reduzieren kann.
  • Was ist der beste Weg, um Massendatensätze aus verschiedenen Quellen (hauptsächlich aus Excel-Tabellen) einzufügen?
Kodvavi
quelle
Die Anwendung, die wir erstellen werden, ist eine webbasierte Anwendung, bei der Benutzer nur begrenzte Kontrolle über SQL Server haben. Der Benutzer lädt die Datei über den Browser hoch und der Rest des Vorgangs wird auf der Serverseite ausgeführt.
Kodvavi

Antworten:

9

SSIS ist der richtige Weg. Wenn Sie noch nie ein Paket erstellt haben und wissen, dass Ihre Quelldateien (lesen Sie auch: Tabellenkalkulationen) immer dieselben sein werden, können Sie den Import / Export-Assistenten von SQL Server verwenden. Klicken Sie in SSMS mit der rechten Maustaste auf Datenbank und wählen Sie Aufgaben> Daten importieren (oder exportieren) ...

Dies öffnet einen Assistenten, der Sie durch die Schritte zur Auswahl Ihrer Quell- / Zieldateien sowie der Zieltabellen führt (kann Tabellen erstellen, falls diese noch nicht vorhanden sind). Sie müssen zuordnen, welche Spalten wohin gehen, aber der Assistent ist ziemlich einfach. Wenn Sie fertig sind, werden Sie aufgefordert, das Paket auszuführen oder zu speichern (oder beides zu tun). Speichern Sie das Paket. Dadurch wird Ihr Paket im DTSX-Format gespeichert, wenn Sie es im Dateisystem speichern möchten. Sie können das Paket auch in SQL Server selbst speichern, um es dann in der msdb-Systemdatenbank zu speichern.

Sobald Sie Ihr Paket gespeichert haben, können Sie einen SQL Agent-Job erstellen, um dieses Paket regelmäßig auszuführen (Sie geben den Zeitplan an), damit Sie Ihre Tabellen immer mit SSIS laden können. Wenn Sie mehr über SSIS erfahren möchten, besuchen Sie die kostenlosen Webinare meines Unternehmens (wir decken den gesamten BI-Stack ab) bei PragmaticWorks

SQLChicken
quelle
Tatsächlich erstellen wir eine webbasierte Anwendung, sodass Benutzer nicht direkt auf die Datenbankschnittstelle zugreifen können. Unsere Anwendung importiert zuerst die Datei und dann führen wir den Rest des Vorgangs über unsere Anwendung aus.
Kodvavi
1
@ kodvavi; Sie können SSIS-Pakete über den .net-Code
aufrufen
1
@ Kodvavi, ich bin nicht sicher, was du mit dieser Aussage meinst. Web-Apps haben normalerweise sowieso nicht die Aufgabe, einen Datenladevorgang zu initiieren. Warum sollte das wichtig sein? Der ETL-Teil der Datenbank- und Webanwendungsschnittstelle besteht aus zwei verschiedenen Dingen.
SQLChicken
Ich weiß, dass viele Leute SSIS-Pakete aus dem Internet initiieren, aber für mich scheint es eine schlechte Idee zu sein, wenn man bedenkt, wie viel mit Excel-Quellen schief gehen kann.
Nick.McDermaid
5

Hier ist ein Beispiel zum Importieren von Daten aus Excel in SQL Server. Eines der Hauptprobleme besteht darin, sicherzustellen, dass Sie die Datenkonvertierungskomponente zwischen Excel und SQL Server verwenden und eine Konvertierung von NVARCHAR nach VARCHAR durchführen, da Excel die Daten als NVARCHAR behandelt.

http://www.mssqltips.com/tip.asp?tip=1393

Sankar Reddy
quelle
nvarchar ist in Ordnung, da unsere Datenbank mehrsprachige Attribute unterstützt. Ich überprüfe die Topis. Thanx
kodvavi
0

Ich würde nichts wegwerfen mr. gbn,Sankar Reddy,SQLChicken. Aber ich möchte sagen, dass es eine einfache Möglichkeit gibt, Excel-Tabellen in SQL zu importieren, und zwar über 'OPENROWSET' TSQL.

Zum Beispiel zum Importieren einer userExcel-Tabelle in eine TestDBDatenbank. Angenommen, ich habe die [user]Tabelle bereits in der TestDBDatenbank erstellt. Dann wäre die einfache Openrowset-TSQL unten so zu erwähnen

Use TestDB;
    Go
    select * INTO [User]
    from openrowset('MICROSOFT.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\TestFolder\User.xlsx; HDR=yes; IMEX=1',
    'select * from [User$]');
    Go

Hinweis: Ich schreibe diese TSQL in einer SQL Server 2012-Umgebung. Für jeden SQL Server ist der Openrowset- OLEDBAnbieter unterschiedlich. Bitte überprüfen Sie den OLEDBfür diese Version von SQL Server unterstützten Verbindungsserver-> Anbieter. In meinem Fall ist es ACE.OLEDB.12.0. Stellen Sie vor dem Import sicher, dass Allow inprocessdieser MICROSOFT.ACE.OLEDB.12.0Anbieter aktiviert ist oder nicht . Es sollte so überprüft werden Geben Sie hier die Bildbeschreibung ein

Hinweis: - Es wurde in einer Produktionsumgebung getestet. Aber in Ihrem Fall ohne in Testumgebung zu testen. Nicht direkt in der Produktionsumgebung ausführen.

Md Haidar Ali Khan
quelle