文档介绍:踏雪无痕
SQL Server导出EXCEL的存储过程
分类: 数据库 2009-10-23 14:56 170人阅读评论(0) 收藏举报
--sql语句就用下面的存储过程
/*--数据导出Excel
导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件
,如果文件不存在,将自动创建文件
,如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型
--邹建 --*/
/*--调用示例
p_exporttb ***@sqlstr='select * from 地区资料'
,***@path='c:/',***@fname='',***@sheetname='地区资料'
--*/
if exists (select * from where id = object_id(N'[dbo].[p_exporttb]') and
OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_exporttb]
GO
create proc p_exporttb
    ***@sqlstr sysname,                      --查询语句,如果查询语句中使用了order by ,请加上top 100
percent
    ***@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(8000),***@fdlist varchar(8000)
--参数检测
if isnull(***@fname,'')='' set ***@fname=''
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