EXEC master.sys.xp_copy_file über Schleife

Michi

Benutzer
Beiträge
13
Hallo zusammen,

ich habe in einer Tabelle Dateinamen mit Pfad und möchte diese Dateien mittels xp_copy_file kopieren.
Zuerst selektiere ich mit die erforderlichen Dateinamen. Dieses Result möchte ich dann in einer Schleife durchlaufen und die Dateien kopieren.

Tabelle:
QuelleZiel
d:\data\datei1.txtd:\data\backup\datei1.txt
d:\data\datei2.txtd:\data\backup\datei2.txt
d:\data\datei3.txtd:\data\backup\datei3.txt

Jetzt möchte ich die Tabelle in einer Schleife durchlaufen und mit xp_copy_file die jeweilige Datei kopieren

EXEC master.sys.xp_copy_file @Quelle, @Ziel

wie kann man das machen? Ich hab das mal so versucht:


DECLARE @quelle VARCHAR(300)
DECLARE @ziel VARCHAR(300)
DECLARE @getid CURSOR
DECLARE @JobID int

SET @JobID = 12

SET @getid = CURSOR FOR
SELECT concat([PfadPaket],'\',[Paket]) as Quelle,
concat([PfadPaket],'\TEMP_SEARCH_FOLDER\',[Paket]) as Ziel
FROM [ADMIN].[dbo].[CTRL_Import_Prozess]
where IDJob = @JobID

OPEN @getid
FETCH NEXT
FROM @getid INTO @quelle, @ziel
WHILE @@FETCH_STATUS = 0
BEGIN

EXEC master.sys.xp_copy_file @quelle, @ziel

FETCH NEXT
FROM @getid INTO @quelle, @ziel
END

CLOSE @getid
DEALLOCATE @getid


Problem ist hier, dass die Prozedur sys.xp_copy_file die Variablen nicht nimmt. Wenn ich die Pfade mit ohne Variablen verwende, also direkt schreibe, klappt es. Ist aber eher undynamisch :-(


EXEC master.sys.xp_copy_file 'd:\data\datei1.txt', 'd:\data\backup\datei1.txt'

Kann mir bitte hier jemand weiterhelfen?

Vielen Dank und Gruß
Michi
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.647
Wenn du statt
EXEC master.sys.xp_copy_file @quelle, @ziel
mal
SELECT @quelle, @ziel
machst, kommen dann überall die richtigen Werte?

Läuft die fertige SP mit den selben Rechten wie dein manueller Kopiervorgang? Die Rechte werden an das Dateisystem weiter gereicht.

Ansonsten könnte man noch verschachteln, also das ganze Statement dynamisch aufbauen und dann mit EXEC den Code mit EXEC aufrufen.
 

Michi

Benutzer
Beiträge
13
Wenn du statt
EXEC master.sys.xp_copy_file @quelle, @ziel
mal
SELECT @quelle, @ziel
machst, kommen dann überall die richtigen Werte?

Läuft die fertige SP mit den selben Rechten wie dein manueller Kopiervorgang? Die Rechte werden an das Dateisystem weiter gereicht.

Ansonsten könnte man noch verschachteln, also das ganze Statement dynamisch aufbauen und dann mit EXEC den Code mit EXEC aufrufen.
Hi,

vielen Dank für die schnelle Antwort!
Genau so (mit 2x EXEC) hab ich es jetzt hinbekommen :)

Vielen Dank für den Tip!!!
Michi
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.647
Naja wenn es mit Variablen für EXEC master.sys.xp_copy_file @quelle, @ziel nicht klappt muss man die Variablen erst auflösen und dann ausführen. Also etwa so grob:
Code:
SET @sql = 'EXEC master.sys.xp_copy_file ' + @quelle + ', ' + @ziel
EXEC(@sql)
 
Oben