Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server xp_cmdshell bcp导出(SQL Server)中的标头_Sql Server_Header_Bcp_Xp Cmdshell - Fatal编程技术网

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

这回答了你的问题吗?即使是一点点的搜索也会找到很多很多这样做的建议。