我没有从这个脚本获得任何输出。甚至没有错误消息...我认为我的问题是在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
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=''
答案 0 :(得分:1)
这只是个人偏好,但我使用-format运算符构建字符串:
$cmdStr = 'Select * FROM {0} WHERE FacilityID={1}' -f $table, $item
Write-Host 'Executing: ' + $cmdStr
Invoke-Sqlcmd $cmdStr
答案 1 :(得分:0)
$item
在ForEach
循环之前未定义,因此不能在之前的赋值中使用它。将声明移动到循环中。
ForEach ($item in $mArray) {
$myQuery = "Select * FROM {0} Where FacilityID='{1}'" -f $table, $item
Write-Host $myQuery
#Invoke-Sqlcmd $myQuery
}