在SQL Server Management Studio中我想知道什么是SQLCMD模式?
Paw*_*wan 69
我做了更多的研究,所以这是我对此的理解,以扩展到目前为止所写的内容:
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模式是一种脚本执行模式,它模拟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)
(在这个简单的示例中,数据库名称可以完全省略,但如果您有跨数据库连接,则需要使用数据库名称)
Ode*_*ded 24
究竟是什么感觉.
这是一种允许您创作SQLCMD脚本的模式.
从MSDN - 使用查询编辑器编辑SQLCMD脚本:
要使用数据库引擎查询编辑器编写或编辑SQLCMD脚本,必须启用SQLCMD脚本模式.
在SQL Server Management Studio中,通过"查询"菜单("查询" - >"SQLCMD模式")进行设置.
归档时间: |
|
查看次数: |
55178 次 |
最近记录: |