如何使用TAB作为SQLCMD中的列分隔符
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做到这一点?
从SQLCMD获取未格式化的结果很困难。
如果你想创建一个制表符分隔的输出文件,BCP可能是一个更好的选择:
bcp "select * from mytable" queryout results.txt -S server -T -c
在一个批处理文件,把双引号之间的制表工作。
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
我试过无数次的擦肩而过实际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脚本,否则你会得到行计数作为你的输出中出现的试用消息!
找到一个很好的答案在这里:SQLCMD outfile as tab delimited text file
- 打开记事本
- 粘贴此:
sqlcmd -S (local) -E -s"<TAB>" -Q "select * from sys.dm_exec_query_stats" -o MyOutput.txt -h-1 -W
- 亮点<TAB>,然后打标签关键
- 保存Ë文件MyBatch.bat
- 运行MyBatch.bat
类似的答案,一个上面贴的,但它在某种程度上,我认为是显著简单。
- 打开文本编辑器
- 按标签
- 突出空白(标签)的块创建
- 复制并粘贴到该点在你的SQL命令
尽管此选项卡被表示为大量的空白,但它是单个字符。
另一个答案有一些不必要的东西粘贴整个命令与"<TAB>"
在里面。我认为这会抛弃人们(它肯定会让我失望)。
要SQLCMD您需要使用制表符,像这样实现这一目标使用:\ t 示例查询使用制表符导出一个SQL数据库表到一个文本文件如下:
sqlcmd -S ServerName -d databaseTableName -Q "SELECT * FROM TABLE_NAME" -o C:\backups\tab_delimiter_bakup.txt -s"\t"
大回答!!!!对于希望在PowerShell中执行此操作的其他人 - 请注意'-s'之后的空格很重要。 :) – 2015-02-09 19:41:52