sqlcmd使用体验

为何要用SQLCMD

平时习惯了在SSMS中做开发,有什么变动也直接在SSMS的查询界面中执行,更新的对象和步骤少还好,如果一下子需要执行非常多的SQL,而且执行顺序还非常重要,甚至需要切换实例去执行,如何确保不犯错误?

再想想以下场景:

  • 你通过SSMS连接某数据库,执行生成脚本(Generate Script)任务,包括表结构和数据,最终生成的脚本大小达数个G,然后你在另外一台机器上执行这个脚本,选择用SSMS打开,软件一度无响应,即便最终打开,点击执行后软件再度假死,基本无法再用SSMS做其它操作,有无其它办法?
  • 在开发环境已通过测试的存储过程、函数、视图等几十个脚本,需要发布到其它环境,于是你一个个查看对象定义然后复制粘贴,中途有事中断了一下,再回过神来已经忘记执行到哪个脚本了,如何保证多环境发布不出错?

SQL Server的sqlcmd工具可解决以上问题,它可执行保存在文本文件中的SQL代码。

当然sqlcmd也可以像ORALCE的SQL*Plus、MySQL、PostgreSQL的命令行工具一样进行交互式的使用,但总体体验不如它们,可作为临时使用,这里重点介绍执行SQL文件的功能。

使用举例

执行单个文件
sqlcmd -S hostname  -U xx -P xx123 -i D:\0-create_database.sql

以上命令将连接到hostname,然后执行D:\0-create_database.sql里的sql代码。

按顺序执行多个文件,且跨不同服务器

假如如下几个文件需要依次在Server_A和Server_B上执行,均为Window验证。

	D:\0-create_database.sql
	D:\1-create_table.sql
	D:\2-insert_data.sql
	D:\3-create_procedure.sql

可新建一文本 D:\scripts.sql,填充内容如下:

	:r D:\0-create_database.sql
	:r D:\1-create_table.sql
	:r D:\2-insert_data.sql
	:r D:\3-create_procedure.sql

然后命令行执行:

sqlcmd -S Server_A -i  D:\scripts.sql
sqlcmd -S Server_B -i  D:\scripts.sql

:r 代表执行脚本,更多命令选项可参考此链接。

在SSMS中使用sqlcmd模式执行代码

切换到sqlcmd后,SSMS的当前查询窗口支持sqlcmd命令:
sqlcmd使用体验_第1张图片
然后直接执行即可:
sqlcmd使用体验_第2张图片

你可能感兴趣的:(MSSQL开发-TSQL)