Eingelesene CSV Dateien verschieben

ostseeskipper

Benutzer
Beiträge
8
Hallo Zusammen

ich programmiere nur gelegentlich SQL Store Procedures und habe folgende Herausforderung für die ich Hilfe benötige
Es werden CSV Dateien aus einem Verzeichnis gelesen und Importiert, das funktioniert.
Anschließend sollen die eingelesenen Dateien in ein anderes Verzeichnis verschoben werden oder alternativ umbenannt werden.
Das ganze soll möglichst ohne Nutzung des "xp_cmdshell" Aufrufs aus einer Storeprocedure heraus passieren.

viele Grüsse von der Küste
 
Werbung:
Ich habe genau das mit xp_cmdshell schon gemacht. Willst du darauf verzichten weil immer mal wieder das wage als "unsicher" bezeichnet wird?

Ich hatte mir zum schreiben von Dateien zuerst OLE angeguckt, hat aber wegen Rechteproblemen erst nicht funktioniert. Eventuell geht es noch darüber, aber: Du aktivierst auch dort die selben DB settings, dann geht auch xp_cmdshell.

Ist also eher eine Frage ob ich das absichere oder ob jeder in der DB sowas auslösen kann. Ich habe noch nirgends konkrete Risiken gelesen, wenn man drauf steht kann man das ja in einen komplett eigenen DB Server legen.
 
Mag sein, daß man da in eher microsoftlastigen Umgebungen anders denkt, aber unter Linux & PostgreSQL (als Beispiel) trennt man sehr, sehr klar DB-Dinge (Daten in die DB einlesen) und OS-Dinge (Dateien verschieben). Und es ist ein gutes Konzept, aus der DB heraus KEINE OS-Dinge zu machen. (schon weil das rechtemäßig schon nicht trivial ist ...)

Der Ansatz wäre daher, das NICHT via StoredProcs aus der DB zu machen, sondern sich $irgendwas auf OS-Seite zu basteln. Batch-Datei, die alle relevanten Dateien ermittelt, in einer Schleife das in die DB schiebt und dann die grad in der Hand befindliche Datei rumkopiert. So in der Art.
 
Hallo Zusammen

ich programmiere nur gelegentlich SQL Store Procedures und habe folgende Herausforderung für die ich Hilfe benötige
Es werden CSV Dateien aus einem Verzeichnis gelesen und Importiert, das funktioniert.
Anschließend sollen die eingelesenen Dateien in ein anderes Verzeichnis verschoben werden oder alternativ umbenannt werden.
Das ganze soll möglichst ohne Nutzung des "xp_cmdshell" Aufrufs aus einer Storeprocedure heraus passieren.

viele Grüsse von der Küste
Ich würde über filetable gehen. Dann haste kein Problem mit dem Bearbeiten von Files. Kannste alles aus der Datenbank raus machen, ohne xp_cmdshell.
 
Guten Morgen,

Danke für die Infos.
Aus der MS Doc werde ich nicht schlau.
😞
früher gab es in der T-SQL Hilfe wenigstens noch Beispielcode.
Wie kann ich den SSIS aus einer Store Procedure aufrufen?

Um Filetable zu aktivieren muss hier enable stehen?
1656316318057.png
 
Guten Morgen,

Danke für die Infos.
Aus der MS Doc werde ich nicht schlau.
😞
früher gab es in der T-SQL Hilfe wenigstens noch Beispielcode.
Wie kann ich den SSIS aus einer Store Procedure aufrufen?

Um Filetable zu aktivieren muss hier enable stehen?
Anhang anzeigen 1942
Ja, genau. Hier SQL Server FILETABLE - the next generation of SQL FILESTREAM ist alles beschrieben.
Das klingt nach einer Aufgabe für die Integration Services. Hier gibt es Möglichkeiten auf das Filesystem zuzugreifen:
Ich denke SSIS ist da eher nicht geeignet bzw. zu kompliziert zu implementieren.
 
@Dukel danke.

Habe mit SSIS kaum Erfahrungen, nur mal ein, zwei Dateien zum Erstellen einer Tabelle genutzt.
Damit ich dich richtig verstehe.
Ich erstelle mir ein SSIS Paket (mit dem lese ich nach und nach alle Dateien schreibe die mit einer SP (inkl. Variablenübergabe) in die entsprechende Tabelle. Als letzter Step wird im SSIS die Dateie umbenannt/verschoben.

@t-sql : Danke, es mit filetable zu machen klingt für mich einfacher umsetzbar.

@akretschmer : ich stimme dir zu das DB und OS getrennt sein sollten, nur kann und darf ich auf OS Seite nichts basteln.
 
@Dukel danke.

Habe mit SSIS kaum Erfahrungen, nur mal ein, zwei Dateien zum Erstellen einer Tabelle genutzt.
Damit ich dich richtig verstehe.
Ich erstelle mir ein SSIS Paket (mit dem lese ich nach und nach alle Dateien schreibe die mit einer SP (inkl. Variablenübergabe) in die entsprechende Tabelle. Als letzter Step wird im SSIS die Dateie umbenannt/verschoben.
Vor allem brauchst Visual Studio um SSIS Pakete überhaupt erzeugen zu können. Evtl. geht das auch über T-SQL.
 
@t-sql : Danke
na das Visual Studio gibts schon mal gar nicht. mag sein das ich gerade SSIS mit DTS verwechselt habe.
Bleibt ja nur FileTable.
reicht der Access Level "T-SQL" aus oder muss ich "full access" angeben?
Ist es normal das man bei "FileStream Share Name" nichts eintragen kann? oder kommt das erst nach dem Neustart?
 
Wenn du nicht grade einen MS SQL Express Server hast kannst du den SQL Agent nutzen. Der kann sowohl Tasks und Batches auf OS Ebene ausführen / anstoßen als auch zeitgesteuert SQL Code ausführen. Und vor allem kann man Aufgaben im Agent aus einer SP heraus anlegen / bearbeiten / starten / löschen / etc.

Ich konnte das selbst noch nicht Testen weil ich noch keine komplett freie Standard Lizenz habe mit der ich das wirklich dürfte (außer Developer), daher habe ich das bisher links liegen gelassen.
 
@ukulele Danke
das hört sich auch gut an, da der Job (per exce SPxxxx) zeitlich aufgerufen werden soll.
Heisst im SQL Server Agent kann man OS Befehle ausführen? Muss ich nachher mal schauen. 👍
 
So verstehe ich es. Nicht direkt aber du kannst natürlich einen Batch erstellen und den dann vom Agent ausführen lassen.
 
Werbung:
@ukulele
Meinst du eine Batch Datei erstellen, im Filesystem ablegen und dann vom SQL Server Agent ausführen lassen.
Das würde ich ungern tun, weil Gefahr das ein "Ahnungsloser Rumspieler" die *.bat ausführt bevor die Daten in die DB gelesen wurden.

So tief steck ich bisher im SQL Server Agent nicht drin aber wie man SP aufruft kann ich schon mal. Muss nur noch schauen ob und wie ich damit auf der OS Seite was ausführen kann. Ist ja eigentlich nur ein move Befehl.
 
Zurück
Oben