首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQLServer版块藏龙卧虎,bcp如何导出一个表数据为带列名的csv格式文件

2012-01-30 
SQLServer版块藏龙卧虎,bcp怎么导出一个表数据为带列名的csv格式文件bcp怎么导出一个表数据为csv格式,带列

SQLServer版块藏龙卧虎,bcp怎么导出一个表数据为带列名的csv格式文件
bcp怎么导出一个表数据为csv格式,带列名的,这样就可以导回去了

如果单独导出一个TXT,往回导就有问题。

这里有个一个例子

--用sql语句可以参考这个.      
       
       
    if       exists(select       1       from       sysobjects       where       name= 'File2Table '       and       objectproperty(id, 'IsProcedure ')=1)      
    drop       procedure       File2Table      
    go      
       
    /*--实现数据导入/导出的存储过程      
       
    可以实现导入/导出       指定表       到文本文件      
    支持自定义行/列分隔符      
       
    --邹建       2003.07(引用请保留此信息)--*/      
       
    /*--调用示例      
       
    导出调用示例      
    --导出指定表,这里指定导出表:地区资料      
    exec       file2table       'zj ', ' ', ' ', 'c:\zj.txt ', 'xzkh_new..地区资料 ',@rowsplit= ', '      
       
    导入调用示例      
    --导入指定表,这里指定导入表:地区资料      
    exec       file2table       'zj ', ' ', ' ', 'c:\zj.txt ', 'xzkh_sa..地区资料 ',0      
       
    --*/      
       
    create       procedure       File2Table      
    @servername       varchar(200)   --服务器名      
    ,@username       varchar(200)   --用户名,如果用NT验证方式,则为空 ' '      
    ,@password       varchar(200)   --密码      
    ,@filename       varchar(1000)   --目录名+文件名      
    ,@tbname       varchar(500)= ' '   --数据库..表名      
    ,@isout       bit=1   --1为导出(默认),0为导入      
    ,@fdsplit       varchar(10)= '\t '   --字段分隔符,默认为制表符      
    ,@rowsplit       varchar(10)= '\n '   --记录分隔符,默认为回车符      
    as      
    declare       @sql       varchar(8000)      
       
    set       @sql= 'bcp       " '+@tbname      
    +case       when       @isout=1       then       ' "       out '       else       ' "       in '       end      
    + '       " '+@filename+ ' "       /c '   + '       /S " '+@servername      


    +case       when       isnull(@username, ' ')= ' '       then       ' '          
    else       ' "       /U " '+@username       end      
    + ' "       /P " '+isnull(@password, ' ')+ ' " '      
    + '       /t " '+@fdsplit+ ' " '      
    + '       /r " '+@rowsplit+ ' " '      
       
    exec       master..xp_cmdshell       @sql      
    go      

这个例子没列的信息,如果搞个union的话,是两个结果集   ,bcp有问题。

谁有好的建议?



[解决办法]
用union all 是可以的

exec master..cmshell 'bcp " select * from pubs.dbo.tablename union all select * from pubs.dbo.tablenameb " queryout -c -Sjinuo -Usa -Pmssql '
[解决办法]
--方法一
create view vi_tablename
as
select 'c1 ' as c1--人为的加入一行作为表头
union
select c1 from tablename

exec master..xp_cmdshell 'bcp "select c1 FROM abc.dbo.vi_tablename
where c1= ' '王五 ' 'or c1= ' 'c1 ' ' " queryout c:\temp.xls -c -S服务器名 -Usa -P密码 '

--方法二
使用文件复制的方法.

建立一个已经设置好格式的Excel文件做为模板. 每次导现都从这个模板文件复制一下, 复制成你真正用于导出数据的Excel文件.

这个复制的操作, 如果是在数据库服务器上完成, 可以使用xp_cmdshell实现文件复制(如果不在数据库服务器上, 则还是要写VBScript脚本, 不过比较操作ExcelApplication容易得多)
exec master.dbo.xp_cmdshell 'copy x:\model.xls x:\use.xls '
[解决办法]
bcp怎么导出一个表数据为带列名的csv格式文件
-------------------------------------------
这样写吧:
declare @var nvarchar(4000) ----注意下面那句中间使用回车换行可能回出错.
set @var=N 'bcp " select * from pubs.dbo.tablename union all select * from pubs.dbo.tablenameb " queryout c:\temp.csv -c -S服务器名 -U用户名 -P密码 '
exec master..xp_cmdshell @var
其中-S -c大小写区分,如果要加T-s语句可以在sql 部分加.

热点排行