`
- 浏览:
277780 次
- 性别:
- 来自:
杭州
-
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
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
- **标题解读**:此标题表明文章将介绍一种在SQL Server环境中使用的存储过程,该存储过程的主要功能是将SQL Server中的数据表导出为Excel文件格式。 #### 描述分析: - **描述内容**:“SQL Server导出表到EXCEL...
通过以上步骤,我们可以实现从Sql Server查询数据,然后在Windows Forms应用程序中展示,最后将这些数据导出到Excel文件。这种功能对于数据分析师和开发者来说非常实用,能够方便地进行数据处理和报告制作。在实际...
分布式查询允许我们直接从Excel文件中选择数据并将其导入到SQL Server表中。使用以下T-SQL语句: ```sql SELECT * INTO newtable FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0', 'DataSource="c:\book1.xls";...
标题与描述概述的知识点主要涉及如何使用SQL Server的BCP命令行工具将数据导出到Excel文件中。BCP(Bulk Copy Program)是SQL Server提供的一种高效的数据导入导出工具,能够快速地将大量数据从数据库复制到文本文件...
开发的程序,该程序涉及了几个关键的技术环节:从Excel读取数据,利用MSFlexGrid控件显示数据,批量将数据导入SQL Server 2000数据库,以及根据MSFlexGrid中的数据生成新的Excel文件。下面将对这些技术点进行详细的...
该存储过程的主要功能是从SQL Server数据库中的指定表或查询结果导出数据至Excel文件。下面是该存储过程的详细解释: - **参数说明**: - `@sqlstr`: 指定用于导出数据的SQL查询语句。 - `@path`: 指定导出的...
在这里,你需要提供数据库连接字符串,以及要执行的SQL查询或存储过程。 4. **设置Excel destination**:接下来,添加Excel目的地组件,这将接收来自OLE DB源的数据并将其写入Excel文件。在配置中,你需要指定Excel...
SQL Server提供了`FORMAT`函数,以及在`SELECT`语句中使用`CONVERT`函数指定输出格式,用于调整日期、时间或数字的显示方式。 4. **聚合计算** 聚合函数如`SUM`、`AVG`、`COUNT`、`MIN`和`MAX`用于对一组数据进行...
标题中的“使用SQL导入数据到Excel”指的是将SQL数据库中的数据提取并导入到Microsoft Excel电子表格中的过程。这个过程通常涉及使用ODBC(Open Database Connectivity)技术,它是一种标准的应用程序编程接口(API...
3. 设置导入参数:指定Excel文件路径,选择要导入的表或工作表,设置数据映射(字段对应关系),并处理可能出现的数据类型不匹配问题。 4. 执行导入:运行导入操作,数据库会根据设置将Excel数据转化为相应的记录...
在SQL Server 2005中,将数据库中的数据导出到Excel文件是常见的操作,这对于数据分析、报表制作以及数据交换等场景非常有用。本文将详细介绍如何使用命令行方式执行这个过程,主要涉及SQL Server的扩展存储过程`xp_...
本文将详细介绍如何利用 SQL Server 2000 的内置功能及扩展存储过程将数据导出至 Excel 文件。 #### 一、使用 `xp_cmdshell` 扩展存储过程导出数据至 Excel `xp_cmdshell` 是一个强大的扩展存储过程,可以执行外部...
这段代码首先检查是否是页面的初始请求(不是回发),然后设置HTTP响应头,指定输出内容的MIME类型为“application/vnd.ms-excel”,告诉浏览器这是一个Excel文件。同时,通过`Content-Disposition`头,我们可以指定...
实例3-42 将查询结果保存为一个XML文件 实例3-43 利用工作表实现记录的分页显示 实例3-44 利用窗体实现记录的分页显示 第4章 编辑Access数据库数据 实例4-1 添加新记录(ADO+AddNew) 实例4-2 添加新记录(ADO...
- 运行`dbc2excel.exe`,输入命令行参数,指定DBC文件路径和输出Excel文件的路径。 - 工具会读取DBC文件,解析其包含的表格信息,并在Excel中创建对应的表格。 - 转换完成后,你可以打开生成的Excel文件查看和...
《Microsoft SQL Server 2008 Reporting Services应用教程》 Microsoft SQL Server 2008 Reporting Services(简称SSRS)是微软提供的一款强大的商业智能工具,用于生成、管理和分发报表。它允许用户通过交互式的...
本项目涉及的是利用VB代码将MSFlexGrid中的数据批量导入到SQL Server 2000数据库中,然后将处理后的数据再导出到Excel文件。下面我们将详细探讨这一过程涉及的关键知识点。 首先,我们要理解MSFlexGrid控件。...
实例3-42 将查询结果保存为一个XML文件 实例3-43 利用工作表实现记录的分页显示 实例3-44 利用窗体实现记录的分页显示 第4章 编辑Access数据库数据 实例4-1 添加新记录(ADO+AddNew) 实例4-2 添加新记录(ADO...