J'ai une procédure stockée dans SQL Server qui vérifie les files de sauvegarde d'aujourd'hui (les files qui ont une date dans son nom de file). Après les vérifications, il passera à robocopy
ces files dans un autre dossier.
Le défi: Dans ce dossier, il pourrait y avoir des files d'hier ou d'autres dates. Mais seuls les files bak d'aujourd'hui sont requirejs pour le transfert.
--@day allows me to capture the day of a month declare @day char(2) set @day = RIGHT('00' + CONVERT(NVARCHAR(2),DATEPART(DAY,GETDATE())),2) --print @day --In "MyFolder", it might containts files like --Project_backupfile_01_2006_02_28_001.bak --OR Project_backupfile_01_2006_02_27_001.bak --Currently I need to hard code 28 to represent 28th. How to pass in @day? EXEC master..xp_cmdshell 'dir d:\myfolder\Project*28*.bak/b' --Similarly, I would like to pass in @day variable so that the --Project_backupfile*02_*@day.bak -- Copy the backup fules from ftp to a local drive EXEC master..xp_cmdshell 'robocopy "d:\source" "E:\MSSQL\Restore\" Project_backupfile*_02_28*.bak /NFL /NDL /COPY:DAT /R:2 /W:1 /XO /E /Z /MT:10'
Utilisez une variable pour former la command avant de la passer à xp_cmdshell
declare @cmd varchar(100) select @cmd = 'dir d:\myfolder\Project*' + datename(day, getdate()) + '*.bak/b' -- print @cmd exec master..xp_cmdshell @cmd
Note: datename(day, getdate())
vous donnera le jour du mois sous forme de string.
stuff(convert(varchar(5), getdate(), 101), 3, 1, '_')
vous donnera 02_28