sql2000如何导出数据到execl2000
sql2000如何导出数据到execl2000
如题!
------解决方案--------------------
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N '[dbo].[p_exporttb] ')   and   OBJECTPROPERTY(id,   N 'IsProcedure ')   =   1)  
drop   procedure   [dbo].[p_exporttb]  
GO  
/*--数据导出EXCEL  
导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件  
如果文件不存在,将自动创建文件  
如果表不存在,将自动创建表  
基于通用性考虑,仅支持导出标准数据类型  
--邹建   2003.10(引用请保留此信息)--*/  
/*--调用示例  
p_exporttb   @sqlstr= 'select   *   from   地区资料 '  
,@path= 'c:\ ',@fname= 'aa.xls ',@sheetname= '地区资料 '  
--*/  
create   proc   p_exporttb  
@sqlstr   varchar(8000), --查询语句,如果查询语句中使用了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= '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+ ' " '  
--连接数据库  
exec   @err=sp_oacreate   'adodb.connection ',@obj   out  
if   @err <> 0   goto   lberr  
exec   @err=sp_oamethod   @obj, 'open ',null,@constr  
if   @err <> 0   goto   lberr  
--创建表的SQL  
declare   @tbname   sysname  
set   @tbname= '##tmp_ '+convert(varchar(38),newid())  
set   @sql= 'select   *   into   [ '+@tbname+ ']   from( '+@sqlstr+ ')   a '  
exec(@sql)  
select   @sql= ' ',@fdlist= ' '  
select   @fdlist=@fdlist+ ',[ '+a.name+ '] '  
,@sql=@sql+ ',[ '+a.name+ ']   '  
+case  
when   b.name   like   '%char '  
then   case   when   a.length> 255   then   'memo '  
else   'text( '+cast(a.length   as   varchar)+ ') '   end  
when   b.name   like   '%int '   or   b.name= 'bit '   then   'int '  
when   b.name   like   '%datetime '   then   'datetime '  
when   b.name   like   '%money '   then   'money '  
when   b.name   like   '%text '   then   'memo '  
else   b.name   end  
FROM   tempdb..syscolumns   a   left   join   tempdb..systypes   b   on   a.xtype=b.xusertype  
where   b.name   not   in( 'image ', 'uniqueidentifier ', 'sql_variant ', 'varbinary ', 'binary ', 'timestamp ')  
and   a.id=(select   id   from   tempdb..sysobjects   where   name=@tbname)  
if   @@rowcount=0   return  
select   @sql= 'create   table   [ '+@sheetname  
+ ']( '+substring(@sql,2,8000)+ ') '  
,@fdlist=substring(@fdlist,2,8000)  
exec   @err=sp_oamethod   @obj, 'execute ',@out   out,@sql  
if   @err <> 0   goto   lberr  
exec   @err=sp_oade