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

Bas*_*mme 55 sql-server ssms

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

Paw*_*wan 69

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

什么是SQLCMD

SQLCMD.exe是SQL Server 2005及更高版本的安装中包含的控制台实用程序.您通常可以在类似的路径中找到它c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE.

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

Invoke-Sqlcmd cmdlet是在SQL Server 2008中引入的,用于将此工具替换为基于Powershell的标准化方法,保留了大多数原始语法和功能.

什么是SSMS中的SQLCMD模式

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

在SQLCMD模式下执行脚本允许使用典型的sqlcmd.exe环境命令.但是,SQLCMD模式没有智能感知或调试支持,因此维护将干净的T-SQL与特定于SQLCMD的代码混合的脚本可能会很麻烦.因此,只有在必要时才应使用它.

用例示例

让我们假设一家公司对名称中包含环境的数据库有一个命名约定,例如:MyDb_ Prod,MyDb_ Test,MyDb_ Dev.该惯例可用于最小化错误的机会.

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

 SELECT *
 FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod
Run Code Online (Sandbox Code Playgroud)

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

 -- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS

 SELECT *
 FROM [$(databaseName)].[dbo].[MyTable1]
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢,@ buli.这个答案是唯一一个解释为什么通常只在SSMS中使用TSQL的人可能选择制作和运行SQLCMD脚本的原因. (4认同)

Ode*_*ded 24

究竟是什么感觉.

这是一种允许您创作SQLCMD脚本的模式.

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

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

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

  • 这个答案通过使用SQLCMD来解释SQLCMD,并且基本上只是一个MSDN链接.所以它没有帮助. (18认同)
  • 显然不是我,但是很多资源并不是真正意义上的使用SQLCMD和在Management Studio中运行一些T-SQL语句之间的区别.Visual Studio上周为我生成的转换脚本会检查是否启用了SQLCMD,如果不启用则拒绝运行,并且在Management Studio的"查询"菜单中似乎有一个启用/禁用它的选项.所以有区别,但是很多资源基本上只是说SQLCMD是一个非常好的设备,可以让你运行T-SQL语句和批处理并保留它. (6认同)
  • 甚至那个指向 MSDN 的链接也没有解释*根本*为什么有人可能会选择使用 SQLCMD 脚本而不是直接的 TSQL。它只是解释了编辑的机制和语法。 (2认同)

小智 14

"当您必须在同一脚本中处理Windows系统命令和Transact-SQL语句时,可以使用SQLCMD脚本."

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

参考:MSDN

  • 比解决方案更有意义和详细。 (2认同)