在 SQL Server Management Studio 中我想知道什么是 SQLCMD 模式?
最佳答案
我做了一些更多的研究,所以这是我对此的理解,以扩展迄今为止所写的内容:
什么是 SQLCMD
SQLCMD.exe是 SQL Server 2005 及更高版本安装中包含的控制台实用程序。您通常可以在类似 c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE
的路径中找到它。 .
它是一个简单的脚本环境,允许自动化与 SQL Server 相关的任务。例如,您可以编写并执行一个脚本,该脚本将登录到 SQL Server 的特定实例,从此连接上的给定目录执行脚本并将输出存储在指定文件中。
Invoke-Sqlcmd
SQL Server 2008 中引入了 cmdlet,作为一种用基于 Powershell 的标准化方法替换该工具的方法,保留了大部分原始语法和功能。
什么是SSMS中的SQLCMD模式
在SSMS中,SQLCMD模式是一种模拟sqlcmd.exe环境的脚本执行模式,因此接受一些不属于T-SQL语言的命令。
不像 sqlcmd.exe
,它使用 SqlClient(与 SSMS 相同的方式)而不是 ODBC 数据提供程序联系数据库,因此在某些方面它可能具有与 sqlcmd.exe
不同的行为。 .
在 SQLCMD 模式下执行脚本允许使用典型命令 sqlcmd.exe
环境。但是,SQLCMD 模式没有 IntelliSense 或调试支持,因此维护将干净的 T-SQL 与 SQLCMD 特定代码混合在一起的脚本可能会很痛苦。因此,应仅在必要时使用它。
示例用例
假设一家公司有一个数据库命名约定,名称中包含环境,例如:MyDb_Prod、MyDb_Test强>,MyDb_Dev。此约定可能用于 minimize chance of mistakes .
当开发人员编写T-SQL脚本时,在部署/测试过程中必须在不同的环境中执行,这将需要多个版本的代码:
SELECT *
FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod
相反,我们可以假设数据库名称将在部署过程中作为 SQLCMD 变量提供,并且将完全相同的文件部署到所有环境:
-- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS
SELECT *
FROM [$(databaseName)].[dbo].[MyTable1]
(在这个简单的示例中,数据库名称可以完全省略,但如果您有跨数据库连接,则需要使用数据库名称)
关于sql-server - 在 SQL Server Management Studio 中什么是 SQLCMD 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9097109/