30岁,我在做什么?

.NET SQL数据库 Office开发 办公自动化

导航

(原创)SQL导出到EXCEL- DTS方法、BCP方法比较

Posted on 2007-01-04 23:01  .net 世界  阅读(3558)  评论(1编辑  收藏  举报


方法1-DTS方法:
1、在SQL服务器上,新建一个DTS包(使用SQL的“导出数据”向导创建一个DTS)取名为 outputvpart
2、在SQL服务器上,新建一个存储过程,取名WriteToExcel,完整代码如下:
      CREATE PROCEDURE WriteToExcel
  AS
              exec master..xp_cmdshell  '  dtsrun   -N"outputvpart" -S"PPLOVEQQ\PPDATABASE" -U"sa" -P""  '
 GO
3、在VB.NET(或在SQL查询分析器)中执行此存储过程就可以导出成EXCEL文件(在SQL中执行存储过程的语句:EXEC writetoexcel)
4、再次执行时需要删除上次执行时创建的EXCEL文件。

此方法的最大的优点是导出速度快,格式完整(有标题),缺点是比较死板,对于一些固定的导出工作比较适合(因为所有的参数,如:被导

的表名、字段、生成的excel文件名、存储路径等信息都封存在DTS包中,所以一旦建立一个DTS包后,一切参数就固定了;而且还有一个缺点是

,不能覆盖上次导出产生的文件,第二次导出前必须删除或重命名第一次导出产生的文件。VB.NET是否能够对DTS进行编程实现参数化导出,

有待继续研究。)
 

方法2-BCP方法:(不推荐)
EXEC master..xp_cmdshell 'bcp "SELECT Topcodecol, Soncodecol FROM Test002.dbo.TopSonRelation" queryout c:\t1.xls -c  -S"PPLOVEQQ\PPDATABASE" -U"sa" -P""'

EXEC master..xp_cmdshell 'bcp Test002.dbo.vpart out c:\temp1.xls -c   -q   -S"PPLOVEQQ\PPDATABASE"  -U"sa"   -P""'
此方法可以导出,但有时候是乱码(将一行数据切割成了两行),网上的资料显示,执行此语句前要见好表及表中的字段,但是我经过测试,

在字段比较少的时候,还好用,但是当字段较多时,不好用(乱码)。此方法实际就是导出带分割符号的文本,而且不导出字段行。