【问题标题】:Headers in xp_cmdshell bcp export (SQL Server)xp_cmdshell bcp 导出 (SQL Server) 中的标头
【发布时间】:2019-11-14 13:36:34
【问题描述】:

我似乎找不到使用xp_cmdshell bcp 导出.csv.txt 文件的方法来保留列标题。目前我正在使用此代码将表导出到 txt 文件:

SET @sqlsave = 'master.sys.xp_cmdshell ''bcp "SELECT * FROM DDMVMS.dbo.'+@SelectedTable+'" queryout "'+@locationoutputtxt+'" -c -T -t; -S localhost\SQLEXPRESS'''

EXEC (@sqlsave);

这一行运行良好,但列的标题没有保留在 txt 文件中。我找不到简单的方法来保留它们。我在循环中使用此代码,因此手动添加它们需要太多时间。

谢谢!

【问题讨论】:

  • 这能回答你的问题吗? SQL BCP with column name
  • 即使是微不足道的搜索也能找到很多很多这样做的建议。

标签: sql-server header bcp xp-cmdshell


【解决方案1】:

要做到这一点,您应该使用查询输出(如您所用),但您的查询需要将两个查询“联合”在一起。一个查询是您编写的原始查询,但首先您必须添加一个初始查询以“选择”您的列标题。只需选择您的列名作为字符串/字符文字。

但是,如果您的原始(现在是“联合”中的第二个查询)查询的数据类型/长度不是字符串/字符数据类型,那么执行此操作可能会遇到数据类型问题。

获取列名的初始查询:

select 'col_a', 'col_b', 'col_c'

将为您的整个查询设置所有数据类型。因此,您在第二个查询中的所有列都需要转换/转换为字符串/字符兼容的数据类型(您可能不会使用“select *...”。例如,col_a 现在将是 char(5)或 varchar(5) 字段。因此,您只需相应地转换数据类型和长度即可。

所以,你应该得到类似的结果:

select cast( 'col_a' varchar( 25 ) ), cast( 'col_b' as char( 10 ) ), cast( 'col_c' as varchar( 100 ) )
union
select cast( col_a as varchar( 25 ) ), cast( col_b as char( 10 ) ), cast( col_c as varchar( 100 ) )
  from blahblah

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多