1

このスクリプトから出力が得られません。エラーメッセージさえありません...私の問題は、WHERE句での変数の使用だと思います。この $(item) をバックティックでエスケープしようとしましたが、進歩がありません。誰かが私が間違っていることを理解するのを手伝ってくれますか?

$dbserver   = "AHDC389"
$dbase  = "FOO"
$table  = "$($dbase).dbo.BAR"

Import-Module “sqlps” -DisableNameChecking

$myArray    = @(Invoke-Sqlcmd "Select myColumn From adifferentserver.dbo.[mylookuptable]") | select-object -expand myColumn

ForEach ($item in $myyArray) {

    Invoke-Sqlcmd "Select * FROM $table Where FacilityID='$(item)' "

}

アップデート:

したがって、以下のようにスクリプトを変更すると、 Where= の変数が展開されていないようです。

$dbserver   = "AHDC389"
$dbase  = "FOO"
$table  = "$($dbase).dbo.BAR"

Import-Module “sqlps” -DisableNameChecking

$myArray    = @(Invoke-Sqlcmd "Select myColumn From adifferentserver.dbo.[mylookuptable]") | select-object -expand myColumn

$myQuery    = "Select * FROM {0} Where FacilityID='{1}'" -f $table, $item

ForEach ($item in $mArray) {

    Write-Host $myQuery
    #Invoke-Sqlcmd $myQuery

}

$myQuery の値がコンソールに返され、$item が展開されていないことを示します。

Select * FROM  FOO.dbo.BAR Where Facility=''
4

2 に答える 2

1

これは単に個人的な好みですが、-format 演算子を使用して文字列を作成します。

$cmdStr = 'Select * FROM {0} WHERE FacilityID={1}' -f $table, $item
Write-Host 'Executing: ' + $cmdStr
Invoke-Sqlcmd $cmdStr
于 2013-08-16T17:45:45.243 に答える