Invoke-sqlCmd 为每个存储过程结果输出 CSV

问题描述 投票:0回答:1

我正在尝试获取多个存储过程,每个存储过程都输出具有不同列名称的特定结果。

我已经设法让脚本解析每个查询,但它只是将所有结果集中到一个文件中。是否有办法让它在单独的文件中为每个查询生成输出(特别是通过 Export-CSV 出于格式原因)?

## DB Variables
    
    $ServerName = "vLonMhDb2012-1"
    $username = "sa"
    $passwordfile = "\\vlonmhapp2012-1\APX$\auto\Scripts\APXSA_PasswordSecurestring.txt"
    $SSPassword = cat $Passwordfile | convertto-securestring
    $PSCredential = new-object -typename System.Management.Automation.PSCredential -argumentlist $username,$SSPassword                
    $DBPassword = $PSCredential.GetNetworkCredential().Password
    $DataBase = "APXFirm"
    $queries = @("set nocount on;EXEC [APXFirm].[APXUserCustom].[pReconPortfolioSFIM] @portfolios='@CUST_Recon_UBSLondon'",
    "set nocount on;EXEC [APXFirm].[APXUserCustom].[pReconSecuritySFIM] @Portfolios='@CUST_Recon_UBSLondon'",
    "set nocount on;EXEC [APXFirm].[APXUserCustom].[pReconAppraisalSFIM] @Portfolios='@CUST_Recon_UBSLondon', @DATE = '{yest}', @UseSettlementDate = 0, @AccruedInterestID = 3",
    "set nocount on;EXEC [APXFirm].[APXUserCustom].[pReconCashSFIM] @Portfolios='@CUST_Recon_UBSLondon', @DATE = '{yest}', @UseSettlementDate = 0, @AccruedInterestID = 3",
    "set nocount on;EXEC [APXFirm].[APXUserCustom].[pReconTransactionHistoryAOSEMEA_181] @IsFromDataLoad=1, @IsUseStoredAuditEventID=1, @PortfolioBaseCode='@CUST_Recon_UBSLondon', @UseSettleDate=0, @StartDate='{tdly}', @EndDate='{toda}'"

    ##------------------------------------------------------------------
    ## Run Stored Proc
    ##------------------------------------------------------------------

     foreach ($query in $queries)

{Invoke-SqlCmd -ServerInstance $ServerName -QueryTimeout 0 -Database $DataBase -Credential $PSCredential -Query $query -Verbose *>> "C:\temp\$CurrentTime.txt"}

到目前为止,仅使用 -verbose *>> 我实际上得到了所有存储过程的结果,但当然它们被集中到一个文本文件中。

我已经尝试过

{Invoke-SqlCmd -ServerInstance $ServerName -QueryTimeout 0 -Database $DataBase -Credential $PSCredential -Query $query  | Export-Csv ($Outputpath + $CurrentTime + ".csv")}

但我相信输出不会进入 foreach 循环中的管道,所以这是不行的。

任何想法都将受到欢迎。

powershell invoke-sqlcmd export-csv
1个回答
0
投票

最后将每个查询结果通过管道传输到一个变量,然后从该变量结果通过管道导出 csv 的目的是使用每个查询的输出创建一个 csv。

     foreach ($query in $queries) {

$returnresults = Invoke-SqlCmd -ServerInstance $ServerName -QueryTimeout 0 -Database $DataBase -Credential $PSCredential -Query $query

$返回结果| Export-Csv ($Outputpath + $query.Substring(47,14) + "" + $CurrentDate + "" + $CurrentTime + ".csv")

}

© www.soinside.com 2019 - 2024. All rights reserved.