bat+sqlcmd 批量運行指令碼,batsqlcmd運行指令碼

來源:互聯網
上載者:User

bat+sqlcmd 批量運行指令碼,batsqlcmd運行指令碼

Hello,此BAT指令碼可以協助開發人員將某檔案夾下所有SQL指令碼按檔案名稱依次在指定資料庫中批量執行。不用忍受powershell invoke-sqlcmd 的笨重,在指運行時多一種選擇。

bat檔案

@echo off@REM ******** ******** General Batch for Starting SQL ******** ******** @REM %1 is the name of SQL script file@rem SET SQL_NAME=%1@SET SQL_NAME=%1@SHIFT /1@REM SHIFT /1@REM P1... is parameters of SQLCMD,P1=%1...@rem c for count@set /a c=0@rem ******** ******** parameters for sql server login ******** ********  @set svrName=SERVERNAME\INSTANCENAME@set uname=your_name@set upwd=your_password@set db=YOURDBNAME@set s= %1 %2 %3 %4 %5 %6 %7 %8 %9@FOR %%A IN (%s%) DO @set /a c=c+1@if %c%==9  goto s9@if %c%==8  goto s8@if %c%==7  goto s7@if %c%==6  goto s6@if %c%==5  goto s5@if %c%==4  goto s4@if %c%==3  goto s3@if %c%==2  goto s2@if %c%==1  goto s1@if %c%==0  goto s0 :s9@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME% -l60 -v P1=%1 P2=%2  p3=%3 p4=%4 p5=%5 p6=%6 p=%7 p8=%8 p9=%9 @goto end:s8@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME% -l60 -v P1=%1 P2=%2  p3=%3 p4=%4 p5=%5 p6=%6 p=%7 p8=%8  @goto end:s7@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME% -l60 -v P1=%1 P2=%2  p3=%3 p4=%4 p5=%5 p6=%6 p=%7  @goto end:s6@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME% -l60 -v P1=%1 P2=%2  p3=%3 p4=%4 p5=%5 p6=%6  @goto end:s5@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME% -l60 -v P1=%1 P2=%2  p3=%3 p4=%4 p5=%5  @goto end:s4@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME% -l60 -v P1=%1 P2=%2  p3=%3 p4=%4  @goto end:s3@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME% -l60 -v P1=%1 P2=%2  p3=%3 @goto end:s2@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME% -l60 -v P1=%1 P2=%2  @goto end:s1@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME% -l60 -v P1=%1 @goto end:s0@sqlcmd -S%svrName% -U%uname% -P%upwd% -d%db% -i%SQL_NAME%  <span style="font-size: 11.8181819915771px; font-family: Arial, Helvetica, sans-serif;">-l60 </span>@goto end:end @echo off@set svrName=@set uname=@set upwd=@set db=@exit /b 0 


調用方法


test.sql

set nocount ongoselect '$(p1)' as p1 ,'$(p2)' as p2

批量調用

d:test 目錄下有多個  sql檔案,批量運行。

運行




 附上:

下載


怎使用sqlcmd在批處理指令碼中執行SQL

  使用sqlcmd可以在批處理指令碼中執行SQL。雖然這個命令的參數很多,但幸運的是,我們不需要全部理解,在這裡簡要介紹以下幾個:
  { -U login_id [ -P password ] } | –E trusted connection }] 如果指定了-E就不需要指定使用者名稱密碼,當然指定了使用者名稱密碼就不用-E了;
  -S server_name [ \ instance_name ] 資料庫伺服器,如果不在原生話必須指定;
  -d db_name 資料庫名字,必須的;
  [ -i input_file ] [ -o output_file ] sql存在檔案裡的話用-i,輸出到檔案用-o;
  [ -q "cmdline query" ] [ -Q "cmdline query" and exit ] 輸入是簡單的sql,不用檔案,推薦用-Q,如果你執行完sqlcmd還需要執行別的動作的話;
  [ -W remove trailing spaces ] 刪除多餘的空格,結果會更緊湊。
  當我們在真正的指令碼中執行sql時,通常需要傳入和輸出變數。
  傳入變數比較簡單,如下所示:
  sqlcmd -d test -Q "select * from dbo.Investment where investor=$(x)" -v x='IBM' -W
  這個語句從test資料庫的Investment表中選出investor等於x的所有行,注意到變數x被包含在${}中。
  然後用-v定義了x的值,'IBM'。
  -W確定輸出的結果不包含多餘的空格。
  x的值如果沒有在sqlcmd中設定,系統會試圖從別的地方去尋找,可能的地方包括,系統內容變數,使用者環境變數,以及用在sqlcmd之前用set設定的變數值。
  如果你的資料裡確實包含${},那麼你並不希望進行變數的替換,使用-x選項可以禁止變數的替換。
  有些時候,你還希望能獲得sql執行結果並儲存到變數中。比如你們的日誌系統每天都在產生記錄檔,你要執行一個指令碼來處理這些記錄檔並存到資料庫中。在處理之前,你必須讀取資料庫以確定上次處理到那一天了。你期望這樣能解決你的問題:
  sqlcmd -d test -Q "select ${x}=max(date) from dbo.logDates " -W
  但這樣並不工作。因為sqlcmd並不提供輸出變數。
  不過你可以這樣做:
  sqlcmd -d test -Q "declare @x nvarchar(8);select @x=max(date) from dbo.logDates;print @x; " -W
  這樣你就可以得到一個乾乾淨淨的數字,而不會包含列名和其他資訊。
  接著你將上述結果匯入到一個檔案裡:
  sqlcmd -d test -Q "declare @x nvarchar(8);select @x=max(date) from dbo.logDates;print @x; " -W 1.txt
  現在到了最關鍵的一步,將檔案的內容寫入到變數裡:
  set /P myvar=<1.txt
  /p表明這個變數myvar的值需要使用者輸入;
  <1.txt表明從1.txt中讀入而不是從其他地方讀入。
......餘下全文>>
 
bat 用 sqlcmd 執行指令檔建立資料庫,黑色螢幕閃下就沒了,怎停止在命令視窗,查看錯誤

你用cmd開啟dos的命令視窗,

然後執行bat不就可以了?
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.