日期:2014-05-18  浏览次数:20523 次

从SQLServer 导入/导出 Excel 的方法
最近在晚上看了一篇文章(从SQLServer     导入/导出   Excel   的方法   ):   但是把源码拷贝过来后   出现很多错误   改了好久也没亚成功!   不知道那位高人   能帮忙看看   并帮忙测试一下后   把源码贴出来供小弟看看   也好给大家分享一下!

下面是   网络源码:


create   proc   p_exporttb
@tbname   sysname,         --要导出的表名
@path   nvarchar(1000),       --文件存放目录
@fname   nvarchar(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=@tbname+’.xls’

--检查文件是否已经存在
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=“         +’;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

/*--如果覆盖已经存在的表,就加上下面的语句
--创建之前先删除表/如果存在的话
select   @sql=’drop   table   [’+@tbname+’]’
exec   @err=sp_oamethod   @obj,’execute’,@out   out,@sql
--*/

--创建表的SQL
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(’tynyint’,’int’,’bigint’,’tinyint’)   then   ’int’
      when   b.name   in(’smalldatetime’,’datetime’)   then   ’datetime’
      when   b.name   in(’money’,’smallmoney’)   then   ’money’
      else   b.name   end
FROM   syscolumns   a   left   join   systypes   b   on   a.xtype=b.xusertype
where   b.name   not   in(’image’,’text’,’uniqueidentifier’,’sql_variant’,’ntext’,’varbinary’,’binary’,’timestamp’)
and   object_id(@tbname)=id
select   @sql=’create   table   [’+@tbname
+’](’+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_oadestroy   @obj

--导入数据
set   @sql=’openrowset(’’MICROSOFT.JET.OLEDB.4.0’’,’’Excel   5.0;HDR=YES
      ;DATABASE=’+@path+@fname+’’’,[’+@tbname+’$])’

exec(’insert   into   ’+@sql+’(’+@fdlist+’)   select   ’+@fdlist+’   from   ’+@tbname)

return

lberr:
exec   sp_oageterrorinfo   0,@sr