欢迎投稿

今日深度:

bat+sqlcmd 批量运行脚本,batsqlcmd运行脚本

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 on
go
select '$(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不就可以了?
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/4419.html NewsArticle bat+sqlcmd 批量运行脚本,batsqlcmd运行脚本 Hello,此BAT脚本可以帮助开发人员将某文件夹下所有SQL脚本按文件名依次在指定数据库中批量执行。不用忍受powershell invoke-sqlcmd 的笨重,在指运行...
相关文章
    暂无相关文章
评论暂时关闭