SQLCMD支持-s参数来指定列分隔符,但我无法确定如何表示选项卡(CHAR(9))字符。我尝试了以下但两个都不起作用:
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 -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
从SQLCMD获取未格式化的结果很困难。
如果你想创建一个制表符分隔的输出文件,BCP可能是一个更好的选择:
bcp "select * from mytable" queryout results.txt -S server -T -c
在这里找到了一个很好的答案: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>,然后按Tab键
- 将文件另存为MyBatch.bat
- 运行MyBatch.bat
我已经多次尝试将实际的TAB字符传递给SQLCMD,我根本无法接受它。我最喜欢的解决方法是将SQLCMD传递给ASCII“单位分隔符”,它是十六进制0x1F,可以通过键入Ctrl-_(控制下划线,在美国键盘上变为ctrl-shift)在命令行输入-'-'(键盘顶行'0'旁边的' - ')。
使用“单位分隔符”的优点是很可能不会出现在任何描述的文本中,并且专门为此目的而设计(参见https://en.wikipedia.org/wiki/Delimiter)
有了SQLCMD为我做这个,然后我通过Unix风格的翻译命令输出它的输出:
tr '\037' '\t'
\ 037是'Unit Separator'的八进制,\ 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脚本,否则您将获得行数作为输出中出现的trialling消息!
与上面发布的一个类似的答案,但它更简单,我认为是重要的。
尽管此选项卡表示为一大块空白,但它是一个单个字符。
另一个答案有一些不必要的东西,用"<TAB>"
粘贴整个命令。我认为这会让人们失望(这肯定会让我失望)。
要在命令提示符窗口中而不是在批处理文件中工作,这是我找到解决它的唯一方法:
sqlcmd -S ServerName -E -d database_Name -Q“选择col1,char(9),col2,char(9),col3,char(9),col4,char(9),col5来自mytable”-o results.txt -W -w 1024 -s“”-m 1
要使用sqlcmd实现此目的,您需要使用Tab字符,如下所示:\ t使用制表符分隔符将单个sql数据库表导出到文本文件中的示例查询如下:
sqlcmd -S ServerName -d databaseTableName -Q "SELECT * FROM TABLE_NAME" -o C:\backups\tab_delimiter_bakup.txt -s"\t"
tldr:使用ALT+009
分隔符字符的ascii选项卡代码
在示例中,将{ALTCHAR}
替换为ALT+009
(按住ALT键并输入数字009)
sqlcmd -E -d tempdb -W -s "{ALTCHAR}" -o junk.txt -Q "select 1 c1,2 c2,3 c3"
编辑junk.txt
。选项卡将位于列之间。
对于其他命令行选项:
sqlcmd -?
注意:shell将ALT char转换为^ I,但是如果通过键入-s“^ I”来尝试该命令,则不会得到相同的结果。