导出表到TXT,含列名

/*****************************************************************************

功能:导出表到TXT,含列名

版本:SQL2005以上

 

测试用例:

 

EXEC ExportToTxt '192.168.8.13','bms_ls..project','oa','oa','e:/ttt','|'

 

 

******************************************************************************/

 

IF OBJECT_ID('ExportToTxt')IS NOT NULL

DROP PROC ExportToTxt

go

 

CREATE PROC ExportToTxt

    @servername varchar(100)='.',   --数据源服务器IP

    @TbName varchar(100),           --格式:数据库..表名

    @USER VARCHAR(100),             --数据源用户名

    @pwd VARCHAR(100),              --密码

    @path VARCHAR(100),             --导出路径+文件名(不加扩展名)  注:导出后是服务器的路径,目前尚不支持网络共享路径

    @ColSplit VARCHAR(10)='|'       --列分隔符 : |

AS

 

DECLARE @SQL VARCHAR(max),

       @S varchar(max)

      

--1 导出列名进 #T

SET @S=ISNULL(@S,'')+'SELECT NAME

FROM '+LEFT(@TbName,CHARINDEX('.',@TbName)-1)+'.sys.columns

WHERE OBJECT_NAME(object_id)='''+RIGHT(@TbName,LEN(@TbName)-charindex('..',@TbName)-1)+''' ORDER BY column_id '

 

 

IF OBJECT_ID('TEMPDB..#T')IS NOT NULL

DROP TABLE #T;

 

CREATE TABLE #T(NAME VARCHAR(50))

 

INSERT #T EXEC(@S)

 

 

--2 导出列名 Txt1

SELECT @SQL=ISNULL(@SQL+@ColSplit,'')+NAME FROM #T

 

SET @S='BCP "SELECT '''''+@SQL+''''' " queryout  '+@path+'1.txt  -c' + ' -S"'+@servername +

    case when isnull(@USER,'')='' then '' else '" -U"'+@USER end +

    '" -P"'+isnull(@pwd,'')+'"'

 

print 'EXEC master..xp_cmdshell '''+@S+''''

EXEC('EXEC master..xp_cmdshell '''+@S+'''')

 

--3 导出列名 Txt2 

SET @S='bcp "'+@TbName+'"  out '+@path+'2.txt -c' + ' -S"'+@servername +

    case when isnull(@USER,'')='' then '' else '" -U"'+@USER end +

    '" -P"'+isnull(@pwd,'')+'"'+

    +' -t"'+@ColSplit+'"'

 

EXEC('EXEC master..xp_cmdshell '''+@S+'''')

 

 

--4 合并Txt1Txt2

SET @S='COPY /B '+@path+'1.TXT+'+@path+'2.TXT '+@path +'.TXT'

EXEC('EXEC master..xp_cmdshell '''+@S+'''')

 

--5 删除Txt1Txt2 

SET @S='EXEC master..xp_cmdshell ''DEL '+@path+'1.TXT'''

EXEC(@S)

SET @S='EXEC master..xp_cmdshell ''DEL '+@path+'2.TXT'''

EXEC(@S)

 

GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值