SQL导出为Excel表
发布时间:2020-12-11 23:13:35  所属栏目:MySql教程  来源:网络整理 
            导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 Version: SQL Server 7.0/2000Created by: Alexander Chigrikhttp://www.MSSQLCity.com/ - all about MS SQL(SQL Server Articles,FAQ,Scripts,Tips a
                
                
                
            | 以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 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,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,@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,@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
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
推荐文章
            站长推荐
            - MySQL drop field;外键错误150
- Mysql入门MySql安装与配置方法(MySQL添加用户、删
- Mysql应用MySQL Hash索引和B-Tree索引的区别
- Mysql实例mysql read_buffer_size 设置多少合适
- Mysql实例深入Mysql,SqlServer,Oracle主键自动增
- Mysql学习mysql中索引使用不当速度比没加索引还慢
- MYSQL数据库MySQL数据库MyISAM存储引擎转为Innod
- MySQL 性能调优my.cnf配置示例
- Java MYSQL / JDBC查询从缓存的Connection返回过
- php – mysql_fetch_array while循环.它是如何
热点阅读
            