In SQL Server 2019 kunt u de sys.xp_delete_files
opgeslagen procedure om een bestand op het bestandssysteem te verwijderen.
Deze opgeslagen procedure is geïntroduceerd in SQL Server 2019 en kan worden gebruikt in combinatie met sys.xp_copy_file
en sys.xp_copy_files
(beide ook geïntroduceerd in SQL Server 2019), waarmee u bestanden kunt kopiëren.
Vóór SQL Server 2019 zou u xp_cmdshell
. moeten gebruiken , die een Windows-opdrachtshell voortbrengt en een tekenreeks doorgeeft voor uitvoering. Met de nieuwe opgeslagen procedures die in SQL Server 2019 zijn geïntroduceerd, kunt u bestanden kopiëren en verwijderen zonder afhankelijk te zijn van xp_cmdshell
.
Voorbeeld 1 – Verwijder 1 bestand
Hier is een voorbeeld van het verwijderen van een enkel bestand.
Voorbeeld op Linux:
EXEC master.sys.xp_delete_files '/var/opt/mssql/data/samples/albums2.csv';
Ik heb deze code uitgevoerd op mijn Mac, die SQL Server 2019 op Linux gebruikt. Dit heeft met succes een bestand verwijderd met de naam albums2.csv
(volledig pad /var/opt/mssql/data/samples/albums2.csv
).
Om bestanden naar een Windows-systeem te kopiëren, moet u de Windows-padconventie gebruiken.
Voorbeeld op Windows:
EXEC master.sys.xp_delete_files 'D:\mssql\data\samples\albums2.csv';
Uiteraard hangt de exacte locatie af van uw situatie.
Voorbeeld 2 – Meerdere bestanden verwijderen
U kunt dezelfde procedure gebruiken om meerdere bestanden te verwijderen.
Voorbeeld op Linux:
EXEC master.sys.xp_delete_files '/var/opt/mssql/data/samples/final/albums*.csv';
In dit geval heb ik alle bestanden in de /var/opt/mssql/data/samples/final
directory die begint met albums
en eindigen met .csv
. Ik gebruik de asterisk (*
) jokerteken om bestanden te selecteren die mogelijk andere tekens bevatten na de albums
onderdeel.
Voorbeeld op Windows:
EXEC master.sys.xp_delete_files 'D:\mssql\data\samples\final\albums*.csv';
Voorbeeld 3 – Mappen verwijderen
U kunt dezelfde procedure gebruiken om de hele map te verwijderen.
Voorbeeld op Linux:
EXEC master.sys.xp_delete_files '/var/opt/mssql/data/samples/final/';
In dit geval heb ik de /var/opt/mssql/data/samples/final
verwijderd directory helemaal.
Voorbeeld op Windows:
EXEC master.sys.xp_delete_files 'D:\mssql\data\samples\final\';