2010-09-30 170 views
7

SQLCMD支持-s参数以指定列分隔符,但我无法确定如何表示制表符(CHAR(9))字符。我曾尝试以下但都不起作用:如何使用TAB作为SQLCMD中的列分隔符

sqlcmd -S ServerName -E -Q"select * from mytable" -s"\t" -o results.txt 
sqlcmd -S ServerName -E -Q"select * from mytable" -s'\t' -o results.txt 

任何想法如何在SQLCMD做到这一点?

回答

7

从SQLCMD获取未格式化的结果很困难。

如果你想创建一个制表符分隔的输出文件,BCP可能是一个更好的选择:

bcp "select * from mytable" queryout results.txt -S server -T -c 
14

在一个批处理文件,把双引号之间的制表工作。

sqlcmd -S ServerName -E -Q"select * from mytable" -s" " -o results.txt 

做在PowerShell中的文件使用相同的逃脱围绕逃脱片包裹双引号

sqlcmd -S ServerName -E -Q"select * from mytable" -s `"`t`" -o results.txt 
+0

大回答!!!!对于希望在PowerShell中执行此操作的其他人 - 请注意'-s'之后的空格很重要。 :) – 2015-02-09 19:41:52

2

我试过无数次的擦肩而过实际TAB字符中SQLCMD,我根本无法让它接受它。我最喜欢的解决方法是通过SQLCMD ASCII十六进制0x1F的ASCII单位分隔符,并且可以通过在命令行中输入Ctrl-_(控制下划线,在美式键盘上将其变为Ctrl-Shift ('''在键盘的第一行'0'旁边)。

使用“单元分隔符”的优点是,这是非常不可能出现在任何文本说明,并为此目的而设计(见https://en.wikipedia.org/wiki/Delimiter

已经得到了SQLCMD做到这一点对我来说,我再管这是输出虽然Unix风格的转换命令:

tr '\037' '\t' 

\ 037是“单元分隔符”的八进制数,而\ t代表制表符,'tr'将为我们翻译这两个字符,我们不需要依赖脚本或shell中的任何引用技巧。

要在Windows上获得'tr',可以从GnuWin32安装CoreUtils包(请参阅http://gnuwin32.sourceforge.net/packages/coreutils.htm),或者增加重量并安装完整的Unix环境,例如Cygwin(http://cygwin.com/)。

把两者结合起来,我们得到:

sqlcmd ... -h-1 -W -k -r1 -s^_ ... | tr '\037' '\t' 

,这将让你与你的标签输出。

查看我上面使用的其他选项,它们对于尝试从SQLCMD获得干净输出(按顺序;没有标题,修剪空白,CRLF到空格,错误到STDERR(不是您的输出文件!),'^ _'是单元分隔符在命令行上的显示方式)。您还需要添加“SET NOCOUNT ON;”到你的查询或sql脚本,否则你会得到行计数作为你的输出中出现的试用消息!

2

找到一个很好的答案在这里:SQLCMD outfile as tab delimited text file

  1. 打开记事本
  2. 粘贴此:sqlcmd -S (local) -E -s"<TAB>" -Q "select * from sys.dm_exec_query_stats" -o MyOutput.txt -h-1 -W
  3. 亮点<TAB>,然后打标签关键
  4. 保存Ë文件MyBatch.bat
  5. 运行MyBatch.bat
2

类似的答案,一个上面贴的,但它在某种程度上,我认为是显著简单。

  1. 打开文本编辑器
  2. 标签
  3. 突出空白(标签)的块创建
  4. 复制并粘贴到该点在你的SQL命令

尽管此选项卡被表示为大量的空白,但它是单个字符。

另一个答案有一些不必要的东西粘贴整个命令与"<TAB>"在里面。我认为这会抛弃人们(它肯定会让我失望)。

0

要SQLCMD您需要使用制表符,像这样实现这一目标使用:\ t 示例查询使用制表符导出一个SQL数据库表到一个文本文件如下:

sqlcmd -S ServerName -d databaseTableName -Q "SELECT * FROM TABLE_NAME" -o C:\backups\tab_delimiter_bakup.txt -s"\t" 
相关问题