如何将存储过程的结果直接导出到MS Excel文件?
问题描述:
我发现了一种直接(更快)地提取MS Sql表格的内容到excel的方法。但我不知道如何使用需要参数的存储过程来完成此操作。是否可以直接提取存储过程的结果到Excel文件中?我知道如何间接使用它(使用数据表),但速度太慢。非常感谢你。 PS:这是我用来做一些测试的方法。它适用于一个表格,但我需要的是提取存储过程的结果:如何将存储过程的结果直接导出到MS Excel文件?
Private Sub SqlToExcelTest2(ByVal excelFilePath As String, _
ByVal nonExistingSheetName As String, _
ByVal sqlServer As String, _
ByVal sqlDatabase As String, _
ByVal sqlUserName As String, _
ByVal sqlPassword As String, _
ByVal sqlTable As String)
Const excelConnStrTemplate As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=2"";"
Dim connStr As String = String.Format(excelConnStrTemplate, _
excelFilePath)
Const adoQueryTemplate As String = "SELECT * INTO {0} FROM [odbc;Driver={{SQL Server}};" & _
"Server={1};Database={2};UID={3};PWD={4}].[{5}] "
Dim query As String = String.Format(adoQueryTemplate, _
nonExistingSheetName, _
sqlServer, _
sqlDatabase, _
sqlUserName, _
sqlPassword, _
sqlTable)
Using oleConn As New OleDb.OleDbConnection(connStr), oleCmd As New OleDb.OleDbCommand(query, oleConn)
oleConn.Open()
oleCmd.ExecuteNonQuery()
oleConn.Close()
End Using
End Sub
答
Python是您的选择吗?
一个人为的存储过程,需要一个参数,并返回结果集:
create procedure usp_Temp @howmany tinyint
as
set nocount on
create table #tmp (ID int identity, Letter char(1), String varchar(50))
declare @i tinyint
set @i = 0
while @i < @howmany
begin
insert into #tmp (Letter, String) values('X', 'The quick brown fox...')
set @i = @i + 1
end
select * from #tmp
set nocount off
在Python中,你可以做这样的事情:
import dbi
import odbc
import csv
conn_str = 'Driver={SQL Server};Server=MyServer;Database=MyDb;Uid=MyLogin;Pwd=MyPwd'
conn = odbc.odbc(conn_str)
curs = conn.cursor()
curs.execute('exec usp_temp @howmany = 15')
results = curs.fetchall()
curs.close()
conn.close()
writer = csv.writer(open('tmp.csv', 'wb'), delimiter = ',',
quoting = csv.QUOTE_MINIMAL)
for result in results: writer.writerow(result)
的Excel应该能够开启一个CSV文件没有问题。
答
我没有Excel,现在要检查,但你可以尝试:
- 启动一个新的工作表中选择菜单数据 - >导入,如“数据源上的东西录制新宏
- “
- 选择你的表/视图(我不知道,如果存储过程也支持)
- 设置中的所有凭证等
- 遵循的步骤休息...
- 停止录制宏
并查看生成的VBA代码。
如果你总是运行相同的查询(或几个不同的),然后创建几个在启动时的自动刷新等数据源可能是你所需要的。
如果您只是偶尔进行测试,您是否可以使用Management Studio功能导出到Excel?将查询输出设置为转到Excel,然后在查询窗口中运行sproc。 – DOK 2009-06-26 17:55:08