自动保存我的SQL Server查询结果

时间:2013-10-23 01:07:28

标签: sql-server sql-server-2008-r2

我有一个查询,根据提供的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

1 个答案:

答案 0 :(得分: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
}