我有一个" SQL脚本",它在本地硬盘上备份数据库,当前日期在文件名备份中,例如:
DECLARE @backuppath varchar(1000)
SELECT @backuppath =(SELECT' C:\ abat \ delta_c _' + convert(varchar(500),GetDate(),112.bak')
BACKUP DATABASE [TEST_2] DISK = @ backuppath
我还有一个批处理文件,它运行并执行我的" SQL脚本"。 例如:
@echo
sqlcmd -S。\ SQLEXPRESS -i" c:\ abat \ myscript.sql"
如果存在" C:\ abat \ @ backuppath"(
Forfiles -p" C:\ abat" -s -m * .BAK -d -7 -c" cmd / c del / q @ path"
)其他(
rem文件不存在
)
暂停
如何在批处理文件中使用sql脚本变量@backuppath来验证是否使用当前日期成功创建备份文件并执行下一个条件" forfiles"
答案 0 :(得分:0)
修改您的SQL脚本:
set nocount on
DECLARE @backuppath varchar(1000);
SELECT @backuppath = (SELECT 'C:\abat\delta_c_' + convert(varchar(500),GetDate(),112.bak');
BACKUP DATABASE [TEST_2] TO DISK=@backuppath;
select @backuppath;
您的批处理脚本。我不确定你的逻辑,但改变应该至少检索@backuppath的值
@echo OFF
setlocal
for /f "delims=" %%A in (
'sqlcmd -S .\SQLEXPRESS -h-1 -i "c:\abat\myscript.sql"'
) do set "@backupPath=%%A"
if exist "%@backupPath%" (
Forfiles -p "C:\abat" -s -m *.BAK -d -7 -c "cmd /c del /q @path"
) else (
rem file doesn't exist
)
pause