CREATE proc out2xls
@服务器名 varchar(255),
@库名 varchar(255),
@表名 varchar(255),
@用户名 varchar(100),
@密码 varchar(100),
@路径及文件名 varchar(255)
as
declare @temp1 nvarchar(4000),@temp2 varchar(8000)set @temp1='select @value1='''',@value2='''' select @value1=@value1+'',''''''+a.name+''''+char(39)+'' [''+a.name+'']'',@value2=@value2+'',cast(''+''[''+a.name+'']''+ '' as varchar(200))'' from '+@库名+'..syscolumns a,'+@库名+'..sysobjects d where a.id=d.id and d.name='''+@表名+''''+' order by a.colorder'
exec sp_executesql @temp1,N'@value1 nvarchar(4000) output , @value2 varchar(8000) output',@temp1 output,@temp2 outputselect @temp1=right(@temp1,len(@temp1)-1),@temp2=right(@temp2,len(@temp2)-1)exec('select * into '+@库名+'.dbo.中间表 from (select '+ @temp1+' union all SELECT '+@temp2+' FROM '+@库名+'..'+@表名+') tem3')
set @temp2='bcp '+@库名+'.dbo.中间表 out '+@路径及文件名+' -c -S'+@服务器名+' -U'+@用户名+' -P'+@密码EXEC master..xp_cmdshell @temp2
exec('drop table '+@库名+'.dbo.中间表')
GO
exec out2xls 'daliserver','pubs','jobs','sa','element','c:\a.txt'
go
drop proc  out2xls

解决方案 »

  1.   

    DTS包也可以在存储过程中调用,另个的方法就是BCP,但是表头的处理就是比较烦,你只能手动插入表头到一个临时表,再插入你要的数据,再导出临时表.
      

  2.   

    EXEC master..xp_cmdshell 'bcp "select * from dbname..tablename " queryout c:\DT.xls -c -Sservername -Usa -Ppassword'
      

  3.   

    都是帶紅星的大蝦﹐真是太感動了﹐先說謝謝了。
     pengdali(大力 V2.0) 
    set @temp1='select @value1='''',@value2='''' select @value1=@value1+'',''''''+a.name+''''+char(39)+'' [''+a.name+'']'',@value2=@value2+'',cast(''+''[''+a.name+'']''+ '' as varchar(200))'' from '+@库名+'..syscolumns a,'+@库名+'..sysobjects d where a.id=d.id and d.name='''+@表名+''''+' order by a.colorder'
    中的
    @value1﹐@value2是什么意思﹐看不大明白
     CrazyFor(蚂蚁) 
    DTS包怎樣在存储过程中调用呀﹐能詳細點嗎?
     tj_dns(愉快的登山者)
    這種方法能導出數據﹐但表頭沒有
      

  4.   

    这是为了解决bcp导出没有列名,你问的是declare @sql nvarchar(1000)
    set @sql='select @ID = max(ID) from '+@TableName
    exec sp_executesql @sql,N'@id int output',@id outputexec传出参数
      

  5.   

    这是为了解决bcp导出没有列名,你问的是declare @sql nvarchar(1000)
    set @sql='select @ID = max(ID) from '+@TableName
    exec sp_executesql @sql,N'@id int output',@id outputexec传出参数
      

  6.   


    declare @column varchar(8000),@tableName varchar(100)
    set @tableName = 'mytable'
    set @column='select top 1 '
    select @column = @column + ''''+name +''''+'as ' + name + ',' from (select b.name from sysobjects a join syscolumns b on a.id=b.id where a.name=@tableName) tem
    set @column = left(@column,len(@column)-1)
    set @column = @column + ' into ##temp from (select distinct b.name from sysobjects a join syscolumns b on a.id=b.id where a.name='''+@tableName+''') tem'
    exec (@column)
    exec('insert into ##temp select * from '+@tableName+'')
    exec master..xp_cmdshell 'bcp "select * from ##temp" queryout c:\b.xls -c -q -Usa -Psqlca.sqlcode'
    drop table ##temp
      

  7.   


    declare @column varchar(8000),@tableName varchar(100)
    set @tableName = 'tableName'  --导出的表名称set @column='select top 1 '
    select @column = @column + ''''+name +''''+'as ' + name + ',' from (select b.name from sysobjects a join syscolumns b on a.id=b.id where a.name=@tableName) tem
    set @column = left(@column,len(@column)-1)
    set @column = @column + ' into ##temp from (select distinct b.name from sysobjects a join syscolumns b on a.id=b.id where a.name='''+@tableName+''') tem'
    exec (@column)
    exec('insert into ##temp select * from '+@tableName+'')
    exec master..xp_cmdshell 'bcp "select * from ##temp" queryout c:\b.xls -c -q -Usa -Ppwd'  --bcp导出drop table ##temp
      

  8.   


    create proc bcp_excel 
    @tableName varchar(100)
    as
    set nocount on
    declare @column varchar(8000)
    set @column='select '
    select @column = @column + ''''+ name + space(100)  +''''+'as ' + name + ',' --如果某个列的长度大于100,那么把space中的数字调大一点
    from (select b.name from sysobjects a join syscolumns b on a.id=b.id where a.name=@tableName) tem
    set @column = left(@column,len(@column)-1)
    --print @column
    set @column = @column + ' into ##temp from (select top 1 b.name from sysobjects a join syscolumns b on a.id=b.id where a.name='''+@tableName+''') tem'
    exec (@column)
    exec('insert into ##temp select * from '+@tableName+'')
    exec master..xp_cmdshell 'bcp "select * from ##temp" queryout c:\b.xls -c -q -Usa -Ppwd'
    drop table ##temp
    set nocount off
    执行:exec bcp_excel 'tableName'但是标题在最后一行