`

SQLServer2000把指定查询输出为Excel文件的存储过程

阅读更多
 
SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO



ALTER   proc stp_ExportTable
    
@sqlstr nvarchar(4000),        --查询语句,如果查询语句中使用了order by ,请加上top 100 percent,注意,如果导出表/视图,用上面的存储过程
    @orderstr nvarchar(255),    --Order by Field
    @path nvarchar(1000),       --文件存放目录
    @fname nvarchar(250),       --文件名
    @sheetname varchar(250)=''      --要创建的工作表名,默认为文件名
as 
    
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
    
declare @obj int,@constr nvarchar(1000),@sql varchar(4000),@fdlist varchar(8000)
    
declare @IstmpTB as bit
    
declare @tmpsql  as varchar(4000)


    
SET @IstmpTB=0
    
--参数检测
    if isnull(@fname,'')='' set @fname='temp.xls'
    
if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#')
    
    
--检查文件是否已经存在
    if right(@path,1)<>'' set @path=@path+''
    
create table #tb(a bit,b bit,c bit)
    
set @sql=@path+@fname

    
--数据库创建语句
    Insert into #tb exec master..xp_fileexist @sql
    
set @sql=@path+@fname
    
    
if exists(select 1 from #tb where a=1)
     
set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'
           
+';CREATE_DB="'+@sql+'";DBQ='+@sql
    
else
     
set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES'
        
+';DATABASE='+@sql+'"'



    
--连接数据库
    --print 'nn33'
    exec @err=sp_oacreate 'adodb.connection',@obj out
    
if @err<>0 goto lberr
    
--print 'nn44'
    exec @err=sp_oamethod @obj,'open',null,@constr
    
if @err<>0 goto lberr

    
--构造temp表的SQL
    declare @tbname sysname
    
set @tbname='##tmp_'+convert(varchar(38),newid())
    
set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'
    
--print @sql
    exec(@sql)
    
set @IstmpTB=1
    
    
select @sql='',@fdlist=''
    
select @fdlist=@fdlist+',['+a.name+''
     ,
@sql=@sql+',['+a.name+''
      
+case when b.name in('char','nchar','varchar','nvarchar'then
         
'text('+cast(case when a.length>255 then 255 else a.length end as varchar)+')'
       
when b.name in('bit','int','bigint','tinyint','smallint'then 'int'
       
when b.name in('smalldatetime','datetime'then 'datetime'
       
when b.name in('money','smallmoney'then 'money'
       
else b.name end
    
FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype
    
where b.name not in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')
     
and a.id=(select id from tempdb..sysobjects where name=@tbname)
    
    
select @sql=substring(@sql,2,2000),@fdlist=substring(@fdlist,2,2000)

    
--create table
    select @sql='create table ['+@sheetname+']('+@sql+')'
    
--print @sql
    exec @err=sp_oamethod @obj,'execute',@out out,@sql
    
if @err<>0 goto lberr
    
--print 'nn'
    --destroy ole object
    exec @err=sp_oadestroy @obj
    
if @err<>0 goto lberr
    
--print 'nn1'
    --导入数据
    
    
set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES
       ;DATABASE=
'+@path+@fname+''',['+@sheetname+'$])'
    
    
set @tmpsql='insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']'
    
--print @tmpsql
    if @orderstr is not null or @orderstr<>''
    
begin
        
set @tmpsql=@tmpsql+' order by '+@orderstr
    
end
    
--print @tmpsql    
    exec(@tmpsql)
    
    
set @sql='drop table ['+@tbname+']'
    
exec(@sql)
    
set @IstmpTB=0
    
    
return 0

lberr:
   
       
EXEC sp_displayoaerrorinfo @obj@err
    
--DELETE TmpTable While Error 
    IF @IstmpTB=1 
    
BEGIN
        
set @sql='drop table ['+@tbname+']'
        
exec(@sql)
    
END
    
return -1
lbexit:
    
SELECT @sql,@constr,@fdlist


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
分享到:
评论

相关推荐

    SQL Server导出表到EXCEL文件的存储过程

    - **标题解读**:此标题表明文章将介绍一种在SQL Server环境中使用的存储过程,该存储过程的主要功能是将SQL Server中的数据表导出为Excel文件格式。 #### 描述分析: - **描述内容**:“SQL Server导出表到EXCEL...

    将Sql Server数据查询结果输出到Excel

    通过以上步骤,我们可以实现从Sql Server查询数据,然后在Windows Forms应用程序中展示,最后将这些数据导出到Excel文件。这种功能对于数据分析师和开发者来说非常实用,能够方便地进行数据处理和报告制作。在实际...

    C_2_0实现Excel与SQLSERVER2005数据交互

    分布式查询允许我们直接从Excel文件中选择数据并将其导入到SQL Server表中。使用以下T-SQL语句: ```sql SELECT * INTO newtable FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'DataSource="c:\book1.xls";...

    sqlserver bcp导出到excel

    标题与描述概述的知识点主要涉及如何使用SQL Server的BCP命令行工具将数据导出到Excel文件中。BCP(Bulk Copy Program)是SQL Server提供的一种高效的数据导入导出工具,能够快速地将大量数据从数据库复制到文本文件...

    VB Excel导入 MSFlexGrid 批量导入SQL2000 然后MSFlexGrid 数据生成Excel

    开发的程序,该程序涉及了几个关键的技术环节:从Excel读取数据,利用MSFlexGrid控件显示数据,批量将数据导入SQL Server 2000数据库,以及根据MSFlexGrid中的数据生成新的Excel文件。下面将对这些技术点进行详细的...

    mssql导出到excel,excel导入到mssql的存储过程

    该存储过程的主要功能是从SQL Server数据库中的指定表或查询结果导出数据至Excel文件。下面是该存储过程的详细解释: - **参数说明**: - `@sqlstr`: 指定用于导出数据的SQL查询语句。 - `@path`: 指定导出的...

    将SQL Server脚本的输出导出到Excel(SSIS)

    在这里,你需要提供数据库连接字符串,以及要执行的SQL查询或存储过程。 4. **设置Excel destination**:接下来,添加Excel目的地组件,这将接收来自OLE DB源的数据并将其写入Excel文件。在配置中,你需要指定Excel...

    SQL Server 数据转换图文教程.rar

    SQL Server提供了`FORMAT`函数,以及在`SELECT`语句中使用`CONVERT`函数指定输出格式,用于调整日期、时间或数字的显示方式。 4. **聚合计算** 聚合函数如`SUM`、`AVG`、`COUNT`、`MIN`和`MAX`用于对一组数据进行...

    使用SQL导入数据到Excel

    标题中的“使用SQL导入数据到Excel”指的是将SQL数据库中的数据提取并导入到Microsoft Excel电子表格中的过程。这个过程通常涉及使用ODBC(Open Database Connectivity)技术,它是一种标准的应用程序编程接口(API...

    将Excel文件导入到数据库中或将数据库中文件导出Excel中

    3. 设置导入参数:指定Excel文件路径,选择要导入的表或工作表,设置数据映射(字段对应关系),并处理可能出现的数据类型不匹配问题。 4. 执行导入:运行导入操作,数据库会根据设置将Excel数据转化为相应的记录...

    SQL2005导出Excel方法

    在SQL Server 2005中,将数据库中的数据导出到Excel文件是常见的操作,这对于数据分析、报表制作以及数据交换等场景非常有用。本文将详细介绍如何使用命令行方式执行这个过程,主要涉及SQL Server的扩展存储过程`xp_...

    sql2000技巧集

    本文将详细介绍如何利用 SQL Server 2000 的内置功能及扩展存储过程将数据导出至 Excel 文件。 #### 一、使用 `xp_cmdshell` 扩展存储过程导出数据至 Excel `xp_cmdshell` 是一个强大的扩展存储过程,可以执行外部...

    在ASP.NET中将数据直接输出成Excel格式

    这段代码首先检查是否是页面的初始请求(不是回发),然后设置HTTP响应头,指定输出内容的MIME类型为“application/vnd.ms-excel”,告诉浏览器这是一个Excel文件。同时,通过`Content-Disposition`头,我们可以指定...

    Excel VBA与数据库整合应用范例精讲书及源代码

    实例3-42 将查询结果保存为一个XML文件 实例3-43 利用工作表实现记录的分页显示 实例3-44 利用窗体实现记录的分页显示 第4章 编辑Access数据库数据 实例4-1 添加新记录(ADO+AddNew) 实例4-2 添加新记录(ADO...

    dbc文件转成excel

    - 运行`dbc2excel.exe`,输入命令行参数,指定DBC文件路径和输出Excel文件的路径。 - 工具会读取DBC文件,解析其包含的表格信息,并在Excel中创建对应的表格。 - 转换完成后,你可以打开生成的Excel文件查看和...

    Microsoft_SQLServer_2008_Reporting_Services应用教程

    《Microsoft SQL Server 2008 Reporting Services应用教程》 Microsoft SQL Server 2008 Reporting Services(简称SSRS)是微软提供的一款强大的商业智能工具,用于生成、管理和分发报表。它允许用户通过交互式的...

    vb Excel导入MSFlexGrid 批量导入SQL2000 然后MSFlexGrid 数据生成Excel

    本项目涉及的是利用VB代码将MSFlexGrid中的数据批量导入到SQL Server 2000数据库中,然后将处理后的数据再导出到Excel文件。下面我们将详细探讨这一过程涉及的关键知识点。 首先,我们要理解MSFlexGrid控件。...

    Excel VBA与数据库整合应用范例精讲

    实例3-42 将查询结果保存为一个XML文件 实例3-43 利用工作表实现记录的分页显示 实例3-44 利用窗体实现记录的分页显示 第4章 编辑Access数据库数据 实例4-1 添加新记录(ADO+AddNew) 实例4-2 添加新记录(ADO...

Global site tag (gtag.js) - Google Analytics