Passer une variable dans xp_cmdshell

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