2012-02-06 187 views
0

我有大約100個需要在SSMS上執行的腳本。我怎樣才能將它們作爲批處理執行,而不是單獨執行它們。在批處理中執行SQL腳本

我試過使用它,但沒有奏效。

@echo off 
ECHO %USERNAME% started the batch process at %TIME% >output.txt 


FOR %%? in ("1.01*.SQL") DO 
(
sqlcmd.exe -S local -E -d collect -i %%? >>output.txt 
) 

pause 

回答

3

下運行目錄中的所有腳本,數據輸出到.log文件和錯誤的.err.log文件:

@echo off 
echo "Enter Server" 
set /p SERVER= 

echo "Enter Database" 
set /p DATABASE= 

if exist *.log (del *.log) 

rem Process the files 
for %%i in (*.sql) do osql -E -S %SERVER% -d %DATABASE% -i"%%i" -m0 -w500 -I -b -r -o"%%i.log" 2>%%i.err.log 

rem Remove empty .err files (ie had no errors) 
for %%a in (*.err.log) do if %%~za==0 del "%%a" 


pause 

注:這方面的一個早期版本使用sqlcmd然而,事實證明sqlcmd在輸出日誌中遺漏了數據。

+0

我跑的批處理所以它創造了一個.SQL文件的每個劇本,我看了看文件,它具有如下的值:1> 2> 3> 4> 5>。而且它沒有創建任何日誌文件或錯誤日誌文件 – peter 2012-02-06 17:45:32

+0

您將看到「.sql」,因爲您沒有啓用在Windows資源管理器中顯示文件擴展名的設置。文件名稱附加了.log,因此它們最終以「myscript.sql.log」爲例。 1> 2> 3>是osql的輸出。 – 2012-02-07 09:56:04

0

要所有:

我發現了一些問題與上面,像Windows 7該做什麼不喜歡%% i或%%一所以我刪除了「%」字符的,然後在DOS腳本啓動工作得很好。

下面是腳本的實際運行版本,其中「1.A00 * .SQL」腳本運行截斷了我的目標表。

的 「A * .SQL」 運行腳本A01_name.sql - > A24_name.sql順序,這是相當不錯的

漢克·弗里曼[email protected]

結束。

REM 「FSA_3.2.2_Runner_for_Insert_Scripts.bat

REM」 腳本運行 「

REM」 如何使用這個腳本」

REM 「從一個遠程桌面會話打開DOS提示符」

REM 「運行下面的腳本」

REM 「驗證數據已經被插入。」

REM 「漢克·弗里曼2014年7月15日[email protected]

REM 「* *開頭

C:

CD \

CD C:\ Database_Scripts \ Insert_Scripts

@echo off

if存在* .LOG(德爾* .LOG)

REM 「**從這裏開始*

REM我在 「運行SQL截斷文件」 爲%

(1.A00_ *。 SQL)do osql -E -i「%i」-m0 -w500 -I -b -r -o「%i.log」2>%i.err。登錄

REM 「運行A01-A24 SQL文件」

爲%i的(A * .SQL)做OSQL -E -i 「%I」 -M0 -w500 -I -b -r - ○ 「%i.log」 2>%i.err.log

REM刪除空.ERR文件(即沒有錯誤)

在%A(* .err.log)辦%〜 ZA == 0刪除 「%一個」

REM 「刪除日誌 - 手動操作」

REM若存在* .LOG(德爾* .LOG)

REM 「*結束*

@echo上