簡體   English   中英

如何在SQL Server查詢中將多個選擇語句導出到不同的csv文件

[英]How to export multiple select statements to different csv files in SQL Server query

我有一個很長的SQL Server查詢,該查詢可在不同的表上運行,進行一些預處理並吐出不同的選擇表輸出。 我希望它們存儲在不同的csv文件中。

簡化的

-- some declare variables and other pre-processing,
-- then save the outputs to different CSV files
select * from Table1 -- save to Table1_Output.csv
select * from Table2 -- save to Table2_Output.csv

現在,我可以使用來運行SQLCmd並將單個select語句的輸出保存到單個CSV。 我需要能夠將各種輸出保存到不同的CSV

上面的解決方案中的第一個選項不可行,因為它需要手動干預並且不能在腳本環境中使用。

謝謝

就個人而言,如果您不能使用SSIS,我將只使用PowerShell:

$SQLServer = 'SQLSERVERNAME';
# If you have a non-default instance such as with SQL Express, use this format
# $SQLServer = 'SQLSERVERNAME\SQLINSTANCENAME';
$Database = 'MyDatabase';

$ConnectionString = "Data Source={0};Initial Catalog={1};Integrated Security=SSPI" -f $SQLServer, $Database;
$CommandText = @'
DECLARE @ID int;
SET @ID  = 123456;
SELECT ID, First_Name FROM dbo.Person WHERE ID = @ID;
SELECT ID, Last_Name FROM dbo.Person WHERE ID = @ID;
'@;

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection;
$SqlConnection.ConnectionString = $ConnectionString;

$SqlCommand = New-Object System.Data.SqlClient.SqlCommand;
$SqlCommand.CommandText = $CommandText;
$SqlCommand.Connection = $SqlConnection;

$SqlDataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter;
$SqlDataAdapter.SelectCommand = $SqlCommand;

$DataSet = New-Object System.Data.DataSet;

$SqlConnection.Open();
$SqlDataAdapter.Fill($DataSet) | Out-Null;
$SqlConnection.Close();
$SqlConnection.Dispose();

$DataSet.Tables[0] | Export-Csv -NoTypeInformation -Path 'U:\FirstNames.csv';
$DataSet.Tables[1] | Export-Csv -NoTypeInformation -Path 'U:\LastNames.csv';

返回多個結果時, sqlcmd在批處理中的每個結果集之間打印空白行。 然后可以使用sed '/^$/q'csplit -s - '/^$/' '{*}'來處理輸出,以分割成單個文件: 如何以可移植的方式在第一個空行中分割文件外殼

UPD如果不是sygwin選項,則自定義VBScript可以通過WScript.CreateObject("WScript.Shell") .Exec運行sqlcmd,並使用.StdOut.ReadLine() .StdOut.AtEndOfStream處理輸出,直到.StdOut.AtEndOfStream獲取命令行輸出在VBScript中(不寫入文件)

另一種方法是使用SSIS SQL Server Integration Services是用於將數據移入數據庫或從數據庫移出的出色工具。 如果您希望實現自動化,則可以使用SQL代理輕松計划SSIS包。

這將需要更多的努力。 您需要將現有的批處理分成幾個較小的SQL語句。

暫無
暫無

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

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