如何向 SQL 代理作业提供 SQL-CMD 变量?

How to supply SQL-CMD variables to SQL Agent Job?

我在 SQL 实例中创建了一个作业。 考虑在执行步骤时将 SQL-CMD 脚本设置为 运行:

:setvar DatabaseName "BillingDatabase"
:setvar ReportingDatabaseName "BillingDatabase_Reporting"

BEGIN TRANSACTION
SET NOCOUNT ON

USE [$(NzeurReportingDatabaseName)]......

COMMIT TRANSACTION

此作业在数据库名称预计不同的各种环境中设置为 运行。 例如,生产环境可能有类似 - “[CompanyName].Billing.Database”和“[CompanyName].Billing.ReportingDatabase”

如何根据创建作业的环境配置此 SQL 作业以提供这些 CMD 变量。 这是因为,我们的部署过程相当自动化,我们不想在创建作业后在 SQL 个作业步骤中手动编辑变量。

知道如何实现吗?

我找不到解决此问题的任何直接解决方案。 但是写了PowerShell脚本来替换脚本文件中的SQL-CMD变量:

function replaceCmdletParameterValueInFile( $file, $key, $value ) {
    $content = Get-Content $file
    if ( $content -match ":setvar\s*$key\s*[\',\""][\w\d\.\:\\-]*[\'\""_]" ) {
        $content -replace ":setvar\s*$key\s*[\',\""][\w\d\.\:\\-]*[\'\""_]", ":setvar $key $value" |
        Set-Content $file     
    } else {
        Add-Content $file ":setvar $key $value"
    }
}

在部署过程中,我调用这个函数来替换Invoke-SqlCmd之前的数据库名称。

replaceCmdletParameterValueInFile $scriptfile "DatabaseName" "`"$MyDatabaseName`""