我在SQL实例中创建了一个Job。 请考虑将以下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作业步骤中手动编辑变量。
知道如何实现这个目标吗?
答案 0 :(得分:0)
我找不到解决此问题的任何直接解决办法。 但编写了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`""