Я пишу сценарий PowerShell, который вызывает SQLCMD для выполнения файла .sql и вывода файла CSV.В команде SQLCMD я хочу передать в запрос параметр, содержащий значение списка, разделенного запятыми, чтобы я мог использовать его в операторе 'IN'.
select a, b, c, d
from dbtbl (nolock)
where client_id in ($(clients))
Команда SQLCMD работает, если я назначаю $client_id к единственному значению, то есть '000_abc', но не работает, если я назначаю переменную как массив.то есть '000_abc', '000_def', '000_ghi'
# Input variables
$SQLSourceFolder = "V:\PS\queries\"
$FolderFile = "V:\PS\Myoutput.csv"
$TaxCode = "MY*script*.sql"
$qtr = "'1'"
$year = "'2019'"
#Works Fine. Only one client filtered in SQL query where clause
$client_id = "'000_abc'"
#Doesn't Work. Multiple clients filtered in SQL query where clause with IN statement.
# $client_id = "'000_abc','000_def', '000_ghi'"
# Find all files matching $TaxCode filter in the folder specified
Get-ChildItem -Path $SQLSourceFolder -Filter $TaxCode | ForEach-Object {
cls
Start-Process "D:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.EXE" -ArgumentList @("-S","tcp:XXXXXXXXXXXXXX,1433", "-d" ,"XXX", "-U", "XXXXXXXX", "-P" ,"XXXXXXXXXX", " -v", " qtr = $qtr", " yr = $year", " clients = $client_id", " -W ", "-s", "~", "-i", "$($_.FullName)", "-o", "$FolderFile")
}
Ожидаемым результатом будет передача многозначной переменной в SQL-запрос, где параметр используется в предложении where с оператором IN.