如何使用sqlcmd在批处理脚本中执行SQL

 我来答
傲秋犹7022
推荐于2018-06-13 · 超过67用户采纳过TA的回答
知道答主
回答量:130
采纳率:50%
帮助的人:60.8万
展开全部
  使用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中读入而不是从其他地方读入。   这样,我们就巧妙的把sql执行的结果写入到变量里了。
hy1397471
推荐于2017-09-05 · 知道合伙人软件行家
hy1397471
知道合伙人软件行家
采纳数:4714 获赞数:17154
15年数据库维护及数据库应用系统开发经验,从事零售业、服务业及财务管理类系统开发与维护。

向TA提问 私信TA
展开全部

1、新建test.sql,如图:

2、新建 test.bat,如图: -S服务器地址 -U登录名 -P登录密码 -i sql路径

3、运行批处理 test.bat ,即可以自动执行 test.sql脚本。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式