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

How can i use sql script variable in a batch file

我有一个 "SQL script",它在本地硬盘驱动器上备份数据库,文件名备份中包含当前日期,例如:

DECLARE @backuppath varchar(1000)

SELECT @backuppath = (SELECT 'C:\abat\delta_c_' + convert(varchar(500),GetDate(),112.bak')

BACKUP DATABASE [TEST_2] TO DISK=@backuppath

我还有一个批处理文件,运行 并执行我的 "SQL script"。 示例:

@echo

sqlcmd -S .\SQLEXPRESS -i "c:\abat\myscript.sql"

if exist "C:\abat\@backuppath"(

Forfiles -p "C:\abat" -s -m *.BAK -d -7 -c "cmd /c del /q @path"

) else (

rem file doesn't exist

)

pause

我如何在批处理文件中使用 sql 脚本变量 @backuppath 来验证是否成功创建了当前日期的备份文件并执行下一个条件 "forfiles"

修改您的 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