簡體   English   中英

invoke-sqlcmd 空變量

[英]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;

該值可以是任何值(例如undefinednull ),只需要在兩個腳本中相同即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM