您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页SQL导出为Excel表

SQL导出为Excel表

来源:意榕旅游网

SQL导出为Excel表 Excel Version: SQL Server 7.0/2000Created by: Alexander Chigrikhttp://www.MSSQLCity.com/ - all about MS SQL(SQL Server Articles, FAQ, Scripts, Tips and Test Exams). This stored procedure can be used to insert the result set

SQL导出为Excel表 Excel $velocityCount-->
Version: SQL Server 7.0/2000
Created by: Alexander Chigrik
http://www.MSSQLCity.com/ - all about MS SQL
(SQL Server Articles, FAQ, Scripts, Tips and Test Exams). 

This stored procedure can be used to insert the result set of the
particular select statement into Excel file (c:\ImportToExcel.xls,
by default).
You can pass the server name, user name, user password, the select
statement to execute, and the file name to store the results set,
as in the example below:

EXEC ExportToExcel @server = '.',
 @uname = 'sa',
 @QueryText = 'SELECT au_fname FROM pubs..authors',
 @filename = 'c:\ImportToExcel.xls'

/*
Version: SQL Server 7.0/2000
Created by: Alexander Chigrik
http://www.MSSQLCity.com/ - all about MS SQL
(SQL Server Articles, FAQ, Scripts, Tips and Test Exams).

This stored procedure can be used to insert the result set of the
particular select statement into Excel file (c:\ImportToExcel.xls,
by default).
You can pass the server name, user name, user password, the select
statement to execute, and the file name to store the results set,
as in the example below:

EXEC ExportToExcel @server = '.',
 @uname = 'sa',
 @QueryText = 'SELECT au_fname FROM pubs..authors',
 @filename = 'c:\ImportToExcel.xls'
*/

IF OBJECT_ID('ExportToExcel') IS NOT NULL DROP PROC ExportToExcel
GO

CREATE PROCEDURE ExportToExcel (
 @server sysname = null,
 @uname sysname = null,
 @pwd sysname = null,
 @QueryText varchar(200) = null,
 @filename varchar(200) = 'c:\ImportToExcel.xls'
)
AS
DECLARE @SQLServer int,
 @QueryResults int,
 @CurrentResultSet int,
 @object int,
 @WorkBooks int,
 @WorkBook int,
 @Range int,
 @hr int,
 @Columns int,
 @Rows int,
 @indColumn int,
 @indRow int,
 @off_Column int,
 @off_Row int,
 @code_str varchar(100),
 @result_str varchar(255)

IF @QueryText IS NULL 
 BEGIN
 PRINT 'Set the query string'
 RETURN
 END

-- Sets the server to the local server
IF @server IS NULL SELECT @server = @@servername

-- Sets the username to the current user name
IF @uname IS NULL SELECT @uname = SYSTEM_USER

SET NOCOUNT ON

EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @SQLServer OUT
IF @hr <> 0
BEGIN
 PRINT 'error create SQLDMO.SQLServer'
 RETURN
END

-- Connect to the SQL Server
IF @pwd IS NULL
 BEGIN
 EXEC @hr = sp_OAMethod @SQLServer, 'Connect', null, @server, @uname
 IF @hr <> 0
 BEGIN
 PRINT 'error Connect'
 RETURN
 END
 END
ELSE
 BEGIN
 EXEC @hr = sp_OAMethod @SQLServer, 'Connect', null, @server, @uname, @pwd
 IF @hr <> 0
 BEGIN
 PRINT 'error Connect'
 RETURN
 END
 END

SELECT @result_str = 'ExecuteWithResults("' + @QueryText + '")'
EXEC @hr = sp_OAMethod @SQLServer, @result_str, @QueryResults OUT
IF @hr <> 0
BEGIN
 PRINT 'error with method ExecuteWithResults'
 RETURN
END

EXEC @hr = sp_OAMethod @QueryResults, 'CurrentResultSet', @CurrentResultSet OUT
IF @hr <> 0
BEGIN
 PRINT 'error get CurrentResultSet'
 RETURN
END

EXEC @hr = sp_OAMethod @QueryResults, 'Columns', @Columns OUT
IF @hr <> 0
BEGIN
 PRINT 'error get Columns'
 RETURN
END

EXEC @hr = sp_OAMethod @QueryResults, 'Rows', @Rows OUT
IF @hr <> 0
BEGIN
 PRINT 'error get Rows'
 RETURN
END

EXEC @hr = sp_OACreate 'Excel.Application', @object OUT
IF @hr <> 0
BEGIN
 PRINT 'error create Excel.Application'
 RETURN
END

EXEC @hr = sp_OAGetProperty @object, 'WorkBooks', @WorkBooks OUT
IF @hr <> 0
BEGIN
 PRINT 'error create WorkBooks'
 RETURN
END

EXEC @hr = sp_OAGetProperty @WorkBooks, 'Add', @WorkBook OUT
IF @hr <> 0
BEGIN
 PRINT 'error with method Add'
 RETURN
END

EXEC @hr = sp_OAGetProperty @object, 'Range("A1")', @Range OUT
IF @hr <> 0
BEGIN
 PRINT 'error create Range'
 RETURN
END

SELECT @indRow = 1
SELECT @off_Row = 0
SELECT @off_Column = 1

WHILE (@indRow <= @Rows)
BEGIN
SELECT @indColumn = 1

WHILE (@indColumn <= @Columns)
BEGIN

EXEC @hr = sp_OAMethod @QueryResults, 'GetColumnString', @result_str OUT, @indRow, @indColumn
IF @hr <> 0
BEGIN
 PRINT 'error get GetColumnString'
 RETURN
END

EXEC @hr = sp_OASetProperty @Range, 'value', @result_str
IF @hr <> 0
BEGIN
 PRINT 'error set value'
 RETURN
END

EXEC @hr = sp_OAGetProperty @Range, 'Offset', @Range OUT, @off_Row, @off_Column
IF @hr <> 0
BEGIN
 PRINT 'error get Offset'
 RETURN
END

SELECT @indColumn = @indColumn + 1

END

SELECT @indRow = @indRow + 1
SELECT @code_str = 'Range("A' + LTRIM(str(@indRow)) + '")'
EXEC @hr = sp_OAGetProperty @object, @code_str, @Range OUT
IF @hr <> 0
BEGIN
 PRINT 'error create Range'
 RETURN
END

END

SELECT @result_str = 'exec master..xp_cmdshell ''del ' + @filename + ''', no_output'
EXEC(@result_str)
SELECT @result_str = 'SaveAs("' + @filename + '")'
EXEC @hr = sp_OAMethod @WorkBook, @result_str
IF @hr <> 0
BEGIN
 PRINT 'error with method SaveAs'
 RETURN
END

EXEC @hr = sp_OAMethod @WorkBook, 'Close'
IF @hr <> 0
BEGIN
 PRINT 'error with method Close'
 RETURN
END

EXEC @hr = sp_OADestroy @object
IF @hr <> 0
BEGIN
 PRINT 'error destroy Excel.Application'
 RETURN
END

EXEC @hr = sp_OADestroy @SQLServer
IF @hr <> 0
BEGIN
 PRINT 'error destroy SQLDMO.SQLServer'
 RETURN
END
GO

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务