如何在Powershell字符串变量中保存SQL查询的结果?

时间:2019-07-02 11:11:41

标签: sql powershell invoke-sqlcmd

我使用invoke-sqlcmd在MSSMS上查询数据库。这没问题。 我有一个循环运行查询X次,查询返回一个键码,例如。 TGHDWS4。

我需要在Powershell中将此键码作为字符串。然后,我想将字符串添加到数组中。

我唯一尝试过的就是使用invoke-sqlcmd。我在网上看到了其他使用连接创建和连接关闭方法的示例,但我不想在可能的情况下这样做。

下面的代码是我所在的位置。如何将键码(从查询中返回)作为字符串添加到数组?

#Enter your confirmation numbers here;
$confArray = @(
'0000000090519838',
'0000000090059392'
)

$resultArray = @()

#Function that runs for each element in the above array
function getKeycode ($confNumber) {


$QueryFmt= "
select distinct top 100       
aa.deliveryKeycode as 'Keycode'
from appointment a with (nolock)
left join appointmentattribute aa with (nolock) on aa.appointmentid = a.appointmentid
where
a.confirmationnumber in (

'"+ $confNumber + "'

)
"

$result = Invoke-Sqlcmd -ServerInstance myserver -Database mydatabase  -Query $QueryFmt

$resultArray.Add($result)

}


#the for loop
foreach($con in $confArray){

getKeycode -confNumber $con
$count ++;

}

2 个答案:

答案 0 :(得分:1)

我想只是从函数中返回数组:

  # ...
  $result = Invoke-Sqlcmd -ServerInstance myserver -Database mydatabase -Query $QueryFmt 
  $resultArray.Add($result) 

  return $resultArray
}

答案 1 :(得分:0)

从您的函数写入父作用域中的数组有点反模式,我强烈建议您这样做。

直接return Invoke-SqlCmd ...

function Get-Keycode ([int]$confNumber) {

  $QueryFmt= "
  select distinct top 100       
  aa.deliveryKeycode as 'Keycode'
  from appointment a with (nolock)
  left join appointmentattribute aa with (nolock) on aa.appointmentid = a.appointmentid
  where
  a.confirmationnumber in (
    '"+ $confNumber + "'
  )"

  return Invoke-Sqlcmd -ServerInstance myserver -Database mydatabase  -Query $QueryFmt

}


# Assign the output of the foreach loop to `$KeyCodes`
$KeyCodes = foreach($con in $confArray){
  Get-Keycode -confNumber $con
  $count++
}