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

标签 sql-server ssms

在 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_ProdMyDb_TestMyDb_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/

相关文章:

asp.net - 如何处理每条聊天消息的时区

c# - SQL 查询可以在 Management Studio 中使用,但不能在 C# 中使用

sql-server - SQL Server数据工具: Error loading custom DeploymentPlanModifier: Required contributor with id could not be loaded

c# - 带限制的 SQL 查询

sql-server - 卸载 SQL Server 2016

sql-server-2005 - 如何让 T-SQL 代码查找重复项?

sql - SSMS QueryBuilder 可以在设计 View 中使用多个数据库吗?

sql-server - 如何在 SQL Server 中向现有表列添加注释?

sql-server - TABLOCK、HOLDLOCK 是否足以阻止 INSERT?