如何在批处理文件中使用sql脚本变量

时间:2016-07-22 08:47:23

标签: batch-file cmd sqlcmd

我有一个" 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"

1 个答案:

答案 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