在SQL Server Management Studio中,什么是SQLCMD模式?

在SQL Server Management Studio中,我想知道什么是SQLCMD模式?

究竟是什么样子。

这是一种让您编写SQLCMD脚本的模式。

从MSDN – 使用查询编辑器编辑SQLCMD脚本 :

要使用数据库引擎查询编辑器编写或编辑SQLCMD脚本,必须启用SQLCMD脚本模式。

在SQL Server Management Studio中,通过查询菜单(查询 – > SQLCMD模式)进行设置。

我做了更多的研究,所以这里是我的理解,以扩展到目前为止写的内容:

什么是SQLCMD?

SQLCMD.exe是包含在SQL Server 2005及更高版本中的控制台实用程序。 通常可以通过如下pathfind它c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE

这是一个简单的脚本环境,允许自动化与SQL服务器相关的任务。 例如,您可以编写并执行一个脚本,该脚本将login到特定的SQL Server实例,从该连接上的给定目录执行脚本并将输出存储在指定的文件中。

SQL Server 2008中引入了Invoke-Sqlcmd cmdlet,作为替代此工具的标准Powershell方法,保留了大部分原始语法和function。

什么是SSMS中的SQLCMD模式

在SSMS中, SQLCMD模式是模拟sqlcmd.exe环境的脚本执行模式,因此接受一些不属于T-SQL语言的命令。 与sqlcmd.exe不同,它使用SqlClient (与SSMS相同的方式)联系数据库,而不是ODBC数据提供程序,因此在某些方面它可能具有与sqlcmd.exe不同的行为。

在SQLCMD模式下执行脚本允许使用sqlcmd.exe环境的典型命令。 但是,对于SQLCMD模式没有IntelliSense或debugging支持,因此维护将干净的T-SQL与SQLCMD特定的代码混合在一起的脚本可能会很痛苦。 因此,只有在必要时才能使用。

示例用例

假设一家公司对名称中包含环境的数据库有一个命名约定,例如: MyDb_ProdMyDb_TestMyDb_Dev 。 这个惯例可能被用来减less错误的机会 。

当开发人员编写T-SQL脚本时,必须在部署/testing过程中的不同环境中执行,这将需要许多版本的代码:

  SELECT * FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod 

相反,我们可以假设在部署过程中将数据库名称作为SQLCMDvariables提供,并且将具有完全相同的文件部署到所有环境:

  -- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS SELECT * FROM [$(databaseName)].[dbo].[MyTable1] 

(在这个简单的示例中,数据库名称可以完全省略,但是如果您有跨数据库连接,则需要使用数据库名称)

“当您必须在同一脚本中处理Windows系统命令和Transact-SQL语句时,才使用SQLCMD脚本。”

“默认情况下,查询编辑器中未启用SQLCMD模式,可以通过单击工具栏中的”SQLCMD模式“图标或从”查询“菜单中select”SQLCMD模式“来启用脚本模式。

参考: MSDN