1

提供された Id 番号に基づいてデータをコンパイルするクエリがあります。私が持っている ID の長いリストに対して一度実行し、結果セットを CSV に保存したいと考えています。手動でできることはわかっていますが、自動化された方法を探しています。

where句でIDを指定せずにクエリを実行しようとしました。これにより、ファイルが1Gbより少し小さくなり、ニーズに対して大きすぎました。

これが私が達成しようとしていることの基本的な考え方です:

Declare @num int
set @num = 0
While @num < 100
Begin

    --I'm trying to figure out a way to store the 
    --result set generateed by this procedure is saved to 'DataExtract' + @num + '.csv'
    Exec LongRunningProcedure @num
    Set @num = @num + 1
End
4

1 に答える 1

0

十分な権限がある場合は、powershell を使用してこれを実現できます。あなたの出力がどのように見えるかはわからないので、これがあなたにとって正確に実行されるかどうかは本当にわかりませんが、うまくいけば、これであなたがどこに行くのかがわかります。

$SQLAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SQLCommand = New-Object system.Data.SqlClient.SqlCommand
$DataSet = New-Object System.Data.DataSet

[STRING]$SQLServer = 'YourServer';
[STRING]$SQLDatabase = 'YourDatabase';
[STRING]$SQLConnectString = "Data Source=$SQLServer; Initial Catalog=$SQLDatabase;    Integrated Security=True";
$SQLConnection = New-Object System.Data.SqlClient.SqlConnection($SQLConnectString)

$extractFile = "C:\test.csv"

for($x = 0; $x -le 100; $x++) {

    $file = "$($extractFile.Split('.')[0])$($x).csv"
    $SQLQuery = "Exec LongRunningProcedure @num = $x"
    $SQLConnection.Open()

    $SQLCommand.CommandText = $SQLQuery
    $SQLCommand.Connection = $SQLConnection

    $SQLAdapter.SelectCommand = $SQLCommand
    $SqlAdapter.Fill($DataSet) | Out-Null

    $SQLConnection.Close() 

    $DataSet.Tables[0] | Export-Csv $file
}
于 2013-10-23T01:23:52.100 に答える