当前位置: 代码迷 >> Sql Server >> 从SQLServer 导入/导出 Excel 的方法,该如何处理
  详细解决方案

从SQLServer 导入/导出 Excel 的方法,该如何处理

热度:284   发布时间:2016-04-27 17:38:12.0
从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   @[email protected]+’.xls’

--检查文件是否已经存在
if   right(@path,1)〈〉’’   set   @[email protected]+’’
create   table   #tb(a   bit,b   bit,c   bit)
set   @[email protected][email protected]
insert   into   #tb   exec   master..xp_fileexist   @sql

--数据库创建语句
set   @[email protected][email protected]
if   exists(select   1   from   #tb   where   a=1)
set   @constr=’DRIVER={Microsoft   Excel   Driver   (*.xls)};DSN=’’’’;READONLY=FALSE’
              +’;CREATE_DB=“         +’;[email protected]+’“’


--连接数据库
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   [[email protected]+’]’
exec   @err=sp_oamethod   @obj,’execute’,@out   out,@sql
--*/

--创建表的SQL
select   @sql=’’,@fdlist=’’
select   @[email protected]+’,[’+a.name+’]’
,@[email protected]+’,[’+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   [[email protected]
+’](’+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
      ;[email protected][email protected]+’’’,[[email protected]+’$])’

exec(’insert   into   [email protected]+’([email protected]+’)   select   [email protected]+’   from   [email protected])

return

lberr:
exec   sp_oageterrorinfo   0,@src   out,@desc   out
lbexit:
select   cast(@err   as   varbinary(4))   as   错误号
  相关解决方案