2016-07-22 109 views
0

我有一個「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://stackoverflow.com/q/14646575)... – aschipfl

回答

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 [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 –