簡體   English   中英

在Powershell中,如何將一個表附加到另一個表並導出為CSV?

[英]In powershell, how can I append one table to another and export to CSV?

我對Powershell相對較新,但是這是我想做的事情:

我需要進行多個SQL查詢,並將結果存儲到同一csv中的所有查詢。 在Powershell 3.0中,我可以使用Export-CSV -Append,但是不幸的是,我需要使用Powershell 2.0。 這就是我現在所擁有的。

#Connection Strings
$Database = "DB"
$Server = "localhost"

#Export File
$AttachmentPath = "C:\Users\Administrator\Desktop\SQLData.csv"

# Connect to SQL and query data, extract data to SQL Adapter
$SqlQuery = "select * from DB.dbo.DB1"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$nRecs = $SqlAdapter.Fill($DataSet)
$nRecs | Out-Null

#Populate Hash Table
$objTable = $DataSet.Tables[0]

#Export Hash Table to CSV File
$objTable | Export-CSV $AttachmentPath

Write-Output "REPORT: Successfully created ${AttachmentPath}"

這將成功創建表並將其導出到如下所示的csv文件中:

Table 1
----------------
col1(int)  col2(string)  col3(string)
col1(int)  col2(string)  col3(string)

但現在我想以完全相同的方式運行其他查詢

# Connect to SQL and query data, extract data to SQL Adapter
$SqlQuery = "select * from DB.dbo.DB2"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$nRecs = $SqlAdapter.Fill($DataSet)
$nRecs | Out-Null

#Populate Hash Table
$objTable = $DataSet.Tables[0]

#IN POWERSHELL 3.0 THIS WOULD WORK
$objTable | Export-CSV $AttachmentPath -Append

並將其附加到第一個表上。 最終的CSV如下所示:

Table 1
----------------
col1(int)  col2(string)  col3(string)
col1(int)  col2(string)  col3(string)

Table 2
----------------
col1(string)  col2(int)  col3(int)
col1(string)  col2(int)  col3(int)

我找不到任何辦法,不勝感激!

編輯

通過將第二個查詢導出到csv,找到了一種解決方法,

$objTable | Export-CSV $AttachmentPath

然后,我使用Get-Content和Add-Content cmdlet附加到第一個csv。 這很hacky,但是可以用。 如果您有更好的選擇,請告訴我!

$file2=Get-Content $AttachmentPath

Add-Content "SQLData.csv" "`n"
Add-Content "SQLData.csv" $file1

為什么不能在如下查詢中使用UNION來從兩個表中獲取合並數據

$SqlQuery = "select * from DB.dbo.DB1 UNION select * from DB.dbo.DB2"

然后,您可以使用Export-CSV filename.csv命令集將數據導出到CSV文件(OR),請參見此線程。 如何在PowerShell中將數據導出到CSV?

盡管工會可能並非在所有情況下都可以接受,但可以合並兩個查詢...只需將數字和日期的輸出轉換為varchar / char。

SELECT Cast(col1(int)as varchar(7))as col1,col2(string)as col2,col3(string)FROM [表1] UNION ALL SELECT col1(string),Cast(col2(int)as varchar(7) )),Cast(col3(int)為varchar(7))

只要確保您不截斷任何數據,就可以將它們混在一起。

當然,通過Powershell將15個表連接起來似乎更易於維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM