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

请问:如何从SQL 2008数据库中“一键(F5)”分别导出多个Excel表?
数据库版本:SQL Server 2008
操作系统:windows 7
Office 版本:2011
问题具体描述:1.在SQL Server 2008中,新建了一个 wsgj 数据库。并且在 wsgj 数据库中存放了40个表(字段统一)。
  2.这40个表的字段都一样:乡、村、小地名、面积、负责人、联系电话
  3.请问:如何把这40个表“一键(F5)”分别导出为Excel?

SQL code
--如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:

insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\表1.xls',sheet1$)
select * from 表1


注:上面的语句能成功将数据库中的“表1”导出到C盘下的“表1.xls”。这样每次导一个表,都要替换两次表名(表1)才能导出。那我这40个表不是要替换80次表名才能全部导出!!!

下面是我尝试写过的循环语句,但仍然没有解决问题。由于接触数据库知识不长,很多东西一知半解。望大家帮我看看,并提出解决问题的放案。谢谢

SQL code

use wsgj
go
declare @table_name varchar(50)   --创建一个变量用来存储表名
declare cur cursor for select name from sysobjects where xtype='U'    --创建游标并搜索所有表名
open cur          
fetch next from cur into @table_name     --循环体
while @@fetch_status=0
 begin
 EXEC ('insert into OPENROWSET("MICROSOFT.JET.OLEDB.4.0","Excel 5.0;HDR=YES;DATABASE=C:\[' + @table_name + '].xls",sheet1$) 
 select * from '+@table_name)
 fetch next from cur into @table_name
 end
 close cur
 deallocate cur

===================================
运行上面代码后的错误:
消息 102,级别 15,状态 1,第 1 行
'MICROSOFT.JET.OLEDB.4.0' 附近有语法错误。


对不起啊,供大家测试的原数据上传不了。

------解决方案--------------------
里的双引号改成两个单引号
SQL code

EXEC ('insert into OPENROWSET(''MICROSOFT.JET.OLEDB.4.0'' 
,''Excel 5.0;HDR=YES;DATABASE=C:\test\' + @table_name + '.xls'',sheet1$) 
select * from '+@table_name)