[英]invoke-sqlcmd empty variable
我正在嘗試使用Invoke-SqlCmd
啟動腳本作為輸入文件執行 SQL 查詢,其中包含 SQLCMD 變量,如 $(varPROJECTNAME)。
例如: CREATE DATABASE [$(varPROJECTNAME)$(varDBNAME)]
在這種情況下,我希望能夠將空字符串設置為varPROJECTNAME
值。
此請求將使用經典 SQLCMD 工具成功運行,但使用 Invoke-SqlCmd 時,我收到錯誤,腳本變量 varPROJECTNAME 未定義。
Invoke-Sqlcmd -Username $LoginSQL -Password $PasswordSQL -ServerInstance $InstanceSQL -Verbose -InputFile "$rootPackage\DB\UpdateDB\00-initSql\00-SubsTechCreateDatabase.sql" -Variable "varPROJECTNAME=$projectName","varDBNAME=$DatabaseName"
在上面的情況下,如果$projectName=""
,將會出現錯誤
是否可以設置一個默認值調用Invoke-SqlCmd,或者從sql腳本的角度來看,在未定義時為變量分配一個默認值?
非常感謝您的幫助
在您的情況下, Invoke-SQLCommand
工具非常有助於運行一些錯誤檢查,確保您在此處定義的所有變量都傳遞給SQL以設置您的數據庫。
我建議進行更改,讓我們為您的腳本添加一些邏輯,看看您是否指定了$ProjectName
值,如果是,則傳遞該值。 如果沒有,請改為運行稍微不同的命令。
If($projectName -ne $null){
$variables = "varPROJECTNAME=$projectName","varDBNAME=$DatabaseName"
}
else{
$variables = "varDBNAME=$DatabaseName"
}
Invoke-Sqlcmd -Username $LoginSQL -Password $PasswordSQL -ServerInstance $InstanceSQL `
-Verbose -InputFile "$rootPackage\DB\UpdateDB\00-initSql\00-SubsTechCreateDatabase.sql" `
-Variable $variables
你能試試這個例子嗎?
在您當前的代碼中,替換它
-Variable "varPROJECTNAME=$projectName"
同
-Variable "varPROJECTNAME=`"$($projectName)`""
在 PowerShell 中合並為“””,然后在 SQL 中檢查它對我有用。
PowerShell:
# coalesce command if undefined, whitespace or empty
if ("$($step.command)".Trim().Length -eq 0) {
$command = '""'
} else {
$command = $($step.command)
}
$variables = @(
"job_name=$($job.name)",
"step_name=$($step.name)",
"step_id=$($step.id)",
"package_path=$($step.package)",
"command=$command",
...
)
Invoke-Sqlcmd -InputFile "$PSScriptRoot\upsert_job_step.sql" -Variable $variables -ConnectionString $connString -Verbose -OutputSqlErrors $true
SQL:
DECLARE @command varchar(2047) = CASE
WHEN NULLIF(TRIM('$(command)'), '""') IS NOT NULL
THEN '$(command)'
ELSE FORMATMESSAGE('/ISSERVER "\"\SSISDB\$(package_path)\"" /ENVREFERENCE %i ..., @referenceId)
END;
該值可以是任何值(例如undefined
或null
),只需要在兩個腳本中相同即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.