mysql - 如何在 foreach 循环后向 powershell 添加 SQL 更新语句

标签 mysql sql powershell

我是 PowerShell 新手。并有一个问题。 我有一个有效的 PS1 脚本,它运行 SQL 查询来获取 ID 参数,然后从 Crystal Report 创建 PDF,根据返回的 SQL 查询形成另一个程序,然后循环返回的参数并重复。 我需要的是将 SQL 更新语句添加到 PS1 脚本中,该语句在创建 PDF 后根据从 SQL 查询返回的相同 ID 更新表。在继续处理下一个 ID 之前,或在脚本根据 ID 创建所有 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,这样脚本就不会为同一 ID 创建另一个 Crystal repoort.pdf,因为 ID 将被标记为 1,然后运行的查询将看不到它。

或者也许有更好的方法来做到这一点。

谢谢。

最佳答案

您可以将时间戳添加到文件名以及 DataTable(查询结果)的第一个字段(假设它是 ID):

# 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
}

关于mysql - 如何在 foreach 循环后向 powershell 添加 SQL 更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55419466/

相关文章:

SQL 存储查询 - 根据记录的存在使用查询结果作为 bool 值

c# - 如果在 C# 中按名称搜索,如何从表中选择行?

php - mysqli_connect 因 dbpassword 失败

sql-server - SQL Server相当于Oracle Wallet Manager

java - powershell invoke-expression java程序获取状态

powershell - 将凭证从 VSTS 通过 Azure PowerShell 脚本双跳到目标 VM 上的 PowerShell 脚本

php - 在 php 中,我们需要在所有文件中包含还是有更好的方法?

html - 将 SQL 查询结果表转换为用于电子邮件的 HTML 表

sql - SQLite:按2列选择最后一行

sql - 我可以在服务器级别而不是数据库级别设置 SQL Azure 漏洞评估吗?