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

问题描述:

我有一个“SQL脚本”,在文件名备份当前的日期,例如本地硬盘上的备份数据库:如何使用SQL脚本变量在批处理文件

DECLARE @backuppath VARCHAR(1000 )

SELECT @backuppath =(SELECT 'C:\ ABAT \ delta_c_' +转换(VARCHAR(500),GETDATE(),112.bak')

BACKUP DATABASE [TEST_2] TO 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德尔/ q @path”

)否则(

REM文件不存在

暂停

如何使用SQL脚本变量@backuppath在批处理文件来验证当前日期成功创建备份文件和执行下一个条件 “FORFILES”

+0

的价值。如果你让你的SQL脚本,你可以[捕捉,使用在_STDOUT_返回'@ backuppath'值' for/F'循环](http://*.com/q/14646575)... – aschipfl

修改您的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 [email protected]; 
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 
+0

我喜欢你的答案,谢谢。 –

+0

工作,当我删除“delims =”parametr –