EXEC master..xp_cmdshell 'bcp
"select T.workdate as 日期,T.deptname as 组别 ,sum(worktime) as 总工时
from 
(
select top 10 workdate,empno,empname,deptno,deptname,
(isnull(workhour,0) +
 isnull(overtime1,0) +
 isnull(overtime2,0))*60
as worktime 
from kq_workday 
) as T 
where deptname like ''%aa%''
group by T.workdate,T.deptname
order by workdate,deptname
" queryout C:\authors.xls -c  -S"SERVER3" -U"Admin" -P"s.951"'
测试过,select语句是没有问题的,服务器名是SERVER3,登录数据库使用本地账号的,用户名为Admin,密码为s.951,这个管理员用户,所以对C盘肯定是有读写权限的。电脑是安装有office软件的,可以打开xls文件的。但是在sql server 2003中运行总是出现如图提示,没有生成xls文件。怎么办呢?SQL Server导出xls文件不成功

解决方案 »

  1.   

    try this,declare @cmd varchar(6000),@sql varchar(6000)select @sql='select T.workdate as 日期,T.deptname as 组别 ,sum(worktime) as 总工时 '
               +' from ( '
               +' select top 10 workdate,empno,empname,deptno,deptname, '
               +' (isnull(workhour,0) + '
               +' isnull(overtime1,0) + '
               +' isnull(overtime2,0))*60 '
               +' as worktime '
               +' from kq_workday '
               +' ) as T '
               +' where deptname like ''%aa%'' '
               +' group by T.workdate,T.deptname '
               +' order by workdate,deptname 'select @cmd='bcp "'+@sql+'" queryout C:\authors.xls -c -S "SERVER3" -U "Admin" -P "s.951" 'exec master..xp_cmdshell @cmd
      

  2.   


    EXEC master..xp_cmdshell 'BCP "SELECT TOP 20 * FROM master..spt_values" queryout D:\1.xls  -c -U"sa" -P"123456"'
    楼主用这个代码测试一下。我这边是可以执行的。
    不过导出的文件不是标准的xls。建议还是用txt类型文件作为目标文件
      

  3.   


    3#的大侠,我运行了你的代码,提出了如图报错,说是kq_workday无效,但是这个表是确实存在。也设置到表所在的数据库了
      

  4.   

    表名kq_workday前加所在的数据库名..declare @cmd varchar(6000),@sql varchar(6000)
     
    select @sql='select T.workdate as 日期,T.deptname as 组别 ,sum(worktime) as 总工时 '
               +' from ( '
               +' select top 10 workdate,empno,empname,deptno,deptname, '
               +' (isnull(workhour,0) + '
               +' isnull(overtime1,0) + '
               +' isnull(overtime2,0))*60 '
               +' as worktime '
               +' from [数据库名].dbo.kq_workday '
               +' ) as T '
               +' where deptname like ''%aa%'' '
               +' group by T.workdate,T.deptname '
               +' order by workdate,deptname '
     
    select @cmd='bcp "'+@sql+'" queryout C:\authors.xls -c -S "SERVER3" -U "Admin" -P "s.951" '
     
    exec master..xp_cmdshell @cmd