Как добавить оператор обновления SQL в powershell после цикла foreach - PullRequest
0 голосов
/ 29 марта 2019

Я нуб с PowerShell.и есть вопрос.У меня есть работающий сценарий PS1, который выполняет запрос SQL для получения параметра ID, затем создает PDF-файл из Crystal Report, формирует другую программу на основе этого возвращенного запроса SQL, а затем перебирает возвращенные параметры и повторяет их.Мне нужно добавить оператор обновления SQL в сценарий PS1, который обновляет таблицу на основе того же идентификатора, который возвращается из запроса SQL после создания PDF.Перед переходом к следующему идентификатору или после того, как скрипт создаст все PDF-файлы на основе идентификаторов.Это то, что мне нужно добавить в скрипт.

Update DB2.dbo.table2 
SET DB2.dbo.table2.Field_01 = 1 
FROM DB2.dbo.table2 
WHERE (DB2.dbo.Table2.ID = {ID})

Работающий скрипт SP1 выглядит следующим образом.

    $serverName="MAIN"
    $databaseName="DB1"
    $sqlCommand="select ID from ID_Query"

        $connectionString = "Data Source=$serverName; " +
            "Integrated Security=SSPI; " +
            "Initial Catalog=$databaseName" 

    $connection = new-object system.data.SqlClient.SQLConnection($connectionString)
    $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
    $connection.Open()

    $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
    $dataset = New-Object System.Data.DataSet
    $adapter.Fill($dataSet) | Out-Null

    $connection.Close()



                foreach ($Row in $dataSet.Tables[0].Rows)
                { 
                                $commandLine= -join(@'
"C:\Program Files (x86)\CR_Program\Program_name\CR_Printer.exe" -report="C:\Crystal_report.rpt" -exportformat=PDF -exportfile="c:\test\{Parameters.ID}.pdf" -parameters"
'@,$($Row[0]),@'
"
'@)
     cmd /c $commandLine
  }

Я надеюсь пометить столбец field_01 в 1, поэтомуСценарий не создает другой Crystal repoort.pdf для того же идентификатора, так как идентификатор будет помечен как 1, тогда выполняемый запрос его не увидит.

или, возможно, найдется лучший способ сделать это.

Спасибо.

1 Ответ

0 голосов
/ 29 марта 2019

Вы можете добавить временную метку к имени файла вместе с первым полем вашего DataTable (результаты запроса), предполагая, что это идентификатор:

# After $connection.Close()
$crPrinter = "C:\Program Files (x86)\CR_Program\Program_name\CR_Printer.exe"
$report = "-report='C:\Crystal_report.rpt'"
foreach ($Row in $dataSet.Tables[0].Rows)
{ 
    $now = [DateTime]::Now.ToString("yyMMddHHmmss")
    $outputFile = "-exportfile='c:\test\Report_id_$Row[0]_$now.pdf' -parameters"
    $commandLine= [string]::Format("{0} {1} {2}", $crPrinter, $report, $outputFile)
    cmd /c $commandLine
    Start-Sleep 1 # Sleeps the script to offset a second
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...