xp_cmdshell bcp导出中的标头(SQL Server)

时间:2019-11-14 13:36:34

标签: sql-server header bcp xp-cmdshell

我似乎找不到使用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文件中。我找不到保留它们的简便方法。我在循环中使用此代码,因此手动添加它们会花费太多时间。

谢谢!

1 个答案:

答案 0 :(得分:0)

为此,您应该使用查询输出(如您所愿),但是您的查询需要将两个查询“结合”在一起。一个查询就是您编写的原始查询,但是首先您必须添加一个初始查询来“选择”列标题。只需选择列名称作为字符串/字符文字即可。

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

获取列名的初始查询:

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