如何向 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`""
我在 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`""