sql-server - 将变量传递给 xp_cmdshell

标签 sql-server variables xp-cmdshell

我在 SQL Server 中有一个存储过程,用于检查今天的备份文件(文件名中包含日期的文件)。检查后,它将继续 robocopy 这些文件到另一个文件夹。

挑战:在此文件夹中,可能有昨天或其他日期的文件。但只有今天的 bak 文件需要传输。

--@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' 

最佳答案

在将命令传递给 xp_cmdshell 之前使用变量形成命令

declare @cmd varchar(100)
select @cmd = 'dir d:\myfolder\Project*' + datename(day, getdate()) + '*.bak/b'
-- print @cmd
exec master..xp_cmdshell @cmd

注意:datename(day, getdate()) 将以字符串的形式提供一个月中的第几天。

stuff(convert(varchar(5), getdate(), 101), 3, 1, '_') 会给你 02_28

关于sql-server - 将变量传递给 xp_cmdshell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35691620/

相关文章:

Java:在 lambda 中分配一个变量

sql-server - 我错过了什么

.net - 将 XML 插入 SQL Server 时出现 XML 解析错误

java - 使用不同的 jdbc 驱动程序连接到多个数据库

java - 如何在两个空洞之间共享变量/任何东西?

java - 为什么 Java 中的局部变量(包括基元)必须始终进行初始化?

java - 执行xp_cmdshell 'wmic ... "java -jar .. ."'时使用哪个帐户

php - PDO <-> SQL Server exec(在 Laravel 中)返回空数组

sql - 恼人的 SQL 死锁