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 回答