目前主要提到了三种办法,一种在程序中调用DTS,二种使用SQL SERVER带的BCP功能,三种使用openrowset。
具体看下面:
这是利用BCP来做的,

使用SQLServer自带的bcp命令——
bcp 数据库名.dbo.表名 out 文件名 –c –q –S”服务器名” –U”用户名” –P”密码

bcp ”select 语句” queryout 文件名 –c –q –S”服务器名” –U”用户名” –P”密码


导出整张表:
EXEC master..xp_cmdshell 'bcp "inter_custom.dbo.out_ck1" out c:\Temp.xls -c -q -S"PETER" -U"sa" -P"[email protected]"'

根据Query语句导出:
EXEC master..xp_cmdshell 'bcp "select * from inter_custom.dbo.out_ck1" queryout c:\Temp.xls -c -q -S"PETER" -U"sa" -P"[email protected]"'
利用bcp要求数据库的服务器名,数据库用户名和密码,这些必须传到程序中。方法可以有很多中,大概的例子,可以看:
http://www.cnblogs.com/kevin/archive/2004/09/21/45351.html

利用openrowset可以写存储过程,可以看下面的例子
引自CSDN的邹建大大

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->if?exists?(select?*?from?dbo.sysobjects?where?id?=?object_id(N'[dbo].[p_exporttb]')?and?OBJECTPROPERTY(id,?N'IsProcedure')?=?1)
drop?procedure?[dbo].[p_exporttb]
GO

/*--数据导出EXCEL

导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件
如果文件不存在,将自动创建文件
如果表不存在,将自动创建表
基于通用性考虑,仅支持导出标准数据类型

--邹建?2003.10(引用请保留此信息)--
*/

/*--调用示例

[email protected]='select?*?from?地区资料'
,@path='c:\',@fname='aa.xls',@sheetname='地区资料'
--
*/
create?proc?p_exporttb
@sqlstr?varchar(8000),--查询语句,如果查询语句中使用了order?by?,请加上top?100?percent
@path?nvarchar(1000),--文件存放目录
@fname?nvarchar(250),--文件名
@sheetname?varchar(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='temp.xls'
if?isnull(@sheetname,'')=''?set?@sheetname=replace(@fname,'.','#')

--检查文件是否已经存在
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="'+@sql+'";DBQ='+@sql
else
set?@constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended?Properties="Excel?8.0;HDR=YES'
+';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

--创建表的SQL
declare?@tbname?sysname
set?@tbname='##tmp_'+convert(varchar(38),newid())
set?@sql='select?*?into?['+@tbname+']?from('+@sqlstr+')?a'
exec(@sql)

select?@sql='',@fdlist=''
select?@fdlist=@fdlist+',['+a.name+']'
,
@sql=@sql+',['+a.name+']?'
+case
when?b.name?like?'%char'
then?case?when?a.length>255?then?'memo'
else?'text('+cast(a.length?as?varchar)+')'?end
when?b.name?like?'%int'?or?b.name='bit'?then?'int'
when?b.name?like?'%datetime'?then?'datetime'
when?b.name?like?'%money'?then?'money'
when?b.name?like?'%text'?then?'memo'
else?b.name?end
FROM?tempdb..syscolumns?a?left?join?tempdb..systypes?b?on?a.xtype=b.xusertype
where?b.name?not?in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')
and?a.id=(select?id?from?tempdb..sysobjects?where?name=@tbname)

if?@@rowcount=0?return

select?@sql='create?table?['+@sheetname
+']('+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?8.0;HDR=YES
;DATABASE=
'+@path+@fname+''',['+@sheetname+'$])'

exec('insert?into?'+@sql+'('+@fdlist+')?select?'+@fdlist+'?from?['+@tbname+']')

set?@sql='drop?table?['+@tbname+']'
exec(@sql)
return

lberr:
exec?sp_oageterrorinfo?0,@src?out,@desc?out
lbexit:
select?cast(@err?as?varbinary(4))?as?错误号
,
@src?as?错误源,@desc?as?错误描述
select?@sql,@constr,@fdlist
go
DataGrids中导出数据到Excel

DataSet结果导出Excel

Export DataSets to Excel...

导出到Excel四种方法

关于从net程序如何导出到excel微软的msdn有专门的讲述,在上面可以搜到。