Как сохранить результат из SQL-запроса в строковой переменной Powershell? - PullRequest
0 голосов
/ 02 июля 2019

Я использовал 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 ]

1 голос
/ 02 июля 2019

Я думаю, просто возвращая ваш массив из вашей функции:

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

  return $resultArray
}
0 голосов
/ 02 июля 2019

Запись в массив в родительской области видимости из вашей функции является чем-то вроде анти-паттерна, я бы настоятельно рекомендовал против этого.

Просто 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++
}
...