SQLCMD 变量概述

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Microsoft Fabric SQL 数据库

SQLCMD 变量在 SQL 项目中用于在 SQL 对象和脚本中创建动态可替换的令牌。 这些变量的值在部署时设置,并且可用于在 SQL 项目中动态设置值。 可以在发布操作中或通过发布配置文件设置 SQLCMD 变量的值。

部署前未设置 SQLCMD 变量 EnvironmentName 的屏幕截图。

SQL 项目文件示例和语法

SQLCMD 变量在 .sqlproj 项下的 <ItemGroup> 文件中定义。 在此示例中,变量 EnvironmentName 使用默认值 testing 进行定义:

...
  <ItemGroup>
    <SqlCmdVariable Include="EnvironmentName">
      <DefaultValue>testing</DefaultValue>
      <Value>$(SqlCmdVar__1)</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>

DefaultValue 元素是可选的。 提供默认值时,它仅用于在 SQL 项目的图形工具的“发布”对话框中加载。 默认值不会编译到 .dacpac 文件中,如果命令行部署不具有发布配置文件指定的值,也没有使用 /v 选项来指定值,将导致 SQLCMD 变量使用空值。

在 SQL 对象中使用 SQLCMD 变量

SQLCMD 变量可以通过在 $(variableName) 语法中整合变量名称,在 SQL 对象和脚本中使用。 例如,以下 SQL 脚本使用 $(EnvironmentName) 变量来控制脚本行为:

IF '$(EnvironmentName)' = 'testing'
BEGIN
    -- do something
END

在发布操作中使用 SQLCMD 变量

可以使用 SqlPackage 命令行工具中的 /v 选项在部署时设置 SQLCMD 变量。 例如,以下命令将 EnvironmentName 变量设置为 production

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:EnvironmentName=production

添加和使用 SQLCMD 变量

要在 Visual Studio 中将 SQLCMD 变量添加到 SQL 项目,右键单击“解决方案资源管理器”中的项目,然后选择“属性”。 在“属性”窗口的“SQLCMD 变量”选项卡中,指定变量名和默认值(可选)。

定义变量后,可以通过将变量名称整合在 $(variableName) 语法中,在 SQL 脚本中使用变量。

从 Visual Studio 发布项目时,SQLCMD 变量是在“发布”对话框中设置的。 使用“加载值”按钮将 SQL 项目中的默认值加载到对话框中。

要在 Visual Studio 中将 SQLCMD 变量添加到 SQL 项目,右键单击“解决方案资源管理器”中的项目,然后选择“属性”。 在“属性”窗口的“SQLCMD 变量”部分中,指定变量名和默认值(可选)。

定义变量后,可以通过将变量名称整合在 $(variableName) 语法中,在 SQL 脚本中使用变量。

从 Visual Studio 发布项目时,SQLCMD 变量是在“发布”对话框中设置的。 使用“加载值”按钮将 SQL 项目中的默认值加载到对话框中。

若要将 SQLCMD 变量添加到 SQL 数据库项目扩展中的 SQL 项目,请在“数据库项目”视图中的项目下右键单击“SQLCMD 变量”节点,然后选择“添加 SQLCMD 变量”。 指定变量名称和默认值(可选)。

定义变量后,可以通过将变量名称整合在 $(variableName) 语法中,在 SQL 脚本中使用变量。

从 SQL 数据库项目扩展发布项目时,SQLCMD 变量值会自动从默认值加载。 当系统提示在发布过程中修改值时,你可以提供替代值。

若要向 SQL 项目添加 SQLCMD 变量,请将 <ItemGroup> 项添加到 .sqlproj 文件中,其中包含每个变量的 <SqlCmdVariable> 项。 <SqlCmdVariable> 项包含变量名称、默认值和可在部署时设置的值。

<ItemGroup>
    <SqlCmdVariable Include="EnvironmentName">
        <DefaultValue>testing</DefaultValue>
        <Value>$(SqlCmdVar__1)</Value>
    </SqlCmdVariable>
</ItemGroup>

定义变量后,可以通过将变量名称整合在 $(variableName) 语法中,在 SQL 脚本中使用变量。

从命令行部署项目时,可以使用 SqlPackage 命令行工具中的 /v 选项设置 SQLCMD 变量。

例如:

SqlPackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:EnvironmentName=production