Sql server xp_cmdshell bcp导出(SQL Server)中的标头
我似乎找不到使用Sql server xp_cmdshell bcp导出(SQL Server)中的标头,sql-server,header,bcp,xp-cmdshell,Sql Server,Header,Bcp,Xp Cmdshell,我似乎找不到使用xp\u 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)
xp\u 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文件中。我找不到一个简单的方法来留住他们。我在循环中使用此代码,因此手动添加它们需要花费太多时间
谢谢大家! 要做到这一点,您应该使用queryout(正如您所做的那样),但您的查询需要将两个查询“联合”在一起。一个查询是您编写的原始查询,但首先必须添加初始查询以“选择”列标题。只需选择列名作为字符串/字符文本 但是,如果原始查询(现在是“union”中的第二个查询)的数据类型/长度不是string/char数据类型,则执行此操作时可能会遇到数据类型问题 获取列名的初始查询:
select 'col_a', 'col_b', 'col_c'
将为整个查询设置所有数据类型。因此,第二个查询中的所有列都需要转换为与字符串/字符兼容的数据类型(您可能不会使用“select*…”。例如,COLU 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
这回答了你的问题吗?即使是一点点的搜索也会找到很多很多这样做的建议。