SQL Server Management Studio 查询中使用 SQLCMD 模式

从 SQL Server 2005 开始,可以在 SQL Server Management Studio 查询编辑器中使用 SQLCMD 模式执行 TSQL。要在查询编辑器中编写或编辑 SQLCMD 脚本,需要启用 SQLCMD 模式。默认情况下,此模式是关闭的。

若要启用 SQLCMD 模式,请单击 “查询” 菜单下的 “SQLCMD模式” 选项:

图片

设置默认启用 SQLCMD 模式,在选项中设置:

图片

所有 SQLCMD 命令都以冒号开头,命令的背景色也将变成灰色。连接到指定的实例,命令如下:

:CONNECT HZC,1433
SELECT SUSER_NAME()
GO
:CONNECT HZC,1433 -U AAAAA -P AAAAA
SELECT SUSER_NAME()
GO

图片

可以看到,一个查询窗口中,连接到了2个实例,并执行相应的SQL语句,是不是方便很多了。使用时一定要注意,每个连接执行的脚步最后,一定要加上批处理执行符号 “GO”。

此外,还可以使用 SQLCMD 模式中的变量设置(:setvar)

-- :setvar <变量名> <变量值>
:setvar srv HZC,1433

--连接到指定实例
:CONNECT $(srv)
PRINT SUSER_NAME()
GO

--指定用户密码访问
:CONNECT $(srv) -U AAAAA -P AAAAA
PRINT SUSER_NAME()
GO

当处理较多的服务器或过度变量参与时,使用变量是非常有用的。既然 SQLCMD 模式引用到 SSMS 中,那么它的最佳实践场景是什么呢?当然是多服务器的操作了!多服务器的操作,无非是使用了 AlwaysOn FCI、AlwaysOn AG、镜像、复制、备份还原等高可用及容灾方案。

例如,在 AlwaysOn AG 中,主节点创建了数据库 TestDB,需要手动配置数据库的高可用(未设置自动种子的情况)。这时候需要来回在各主备副本中执行脚本,非常不方便。而使用 SQLCMD 模式,在一个查询窗口就能完成所有操作。

如下:

-- 设置主备服务器变量
:setvar primarysrv 192.168.1.110
:setvar secondarysrv 192.168.1.111

--主副本:备份数据库
:CONNECT $(primarysrv)
BACKUP DATABASE TestDB TO DISK ='E:\bak\TestDB.BAK' WITH COMPRESSION,INIT
BACKUP Log TestDB TO DISK ='E:\bak\TestDB.BAK' WITH COMPRESSION
GO

--辅助副本:还原数据库
:CONNECT $(secondarysrv)
RESTORE DATABASE [TestDB] FROM  DISK = '\\192.168.1.110\bak\TestDB.BAK'  WITH FILE=1, NORECOVERY
RESTORE LOG [TestDB] FROM  DISK = '\\192.168.1.110\bak\TestDB.BAK'  WITH FILE=2, NORECOVERY
GO

--主副本:添加可用性数据库
:CONNECT $(primarysrv)
DECLARE @SQL VARCHAR(500)
SELECT @SQL = 'ALTER AVAILABILITY GROUP ['+name+'] ADD DATABASE [TestDB];'  FROM sys.availability_groups
EXEC(@SQL)
GO

--辅助副本:设置可用性数据库
:CONNECT $(secondarysrv)
DECLARE @SQL VARCHAR(500)
SELECT @SQL = 'ALTER DATABASE [TestDB] SET HADR Availability GROUP = ['+name+']; '  FROM sys.availability_groups
EXEC(@SQL)
GO

替换另一个数据库名称,也能很快设置数据库的高可用,即使有更多的副本,也能很快建立数据库高可用同步。SQLCMD 模式的优点也就体现出来了。这种模式比起 “已注册服务器”,不需要来回切换查询窗口,对数据库的维护更加方便了!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值