草庐IT

关于sql server:SQLCMD中如何使用TAB作为列分隔符

codeneng 2023-03-28 原文

How to use TAB as column separator in SQLCMD

SQLCMD 支持 -s 参数来指定列分隔符,但我不知道如何表示制表符 (CHAR(9)) 字符。我尝试了以下方法,但都不起作用:

1
2
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 中做到这一点?


在批处理文件中,在双引号之间放置一个制表符是可行的。

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

要在 PowerShell 文件中执行相同操作,请使用转义双引号包裹转义选项卡

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

  • 很好的答案!!!!对于希望在 PowerShell 中执行此操作的其他人 - 请注意 -s 之后的空格很重要。 :)


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

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

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


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

  • Open Notepad
  • Paste this: sqlcmd -S (local) -E -s"" -Q"select * from sys.dm_exec_query_stats" -o MyOutput.txt -h-1 -W
  • Highlight , then hit the Tab key
  • Save the file as MyBatch.bat
  • Run MyBatch.bat

  • 我已经多次尝试将实际的 TAB 字符传递给 SQLCMD,但我根本无法接受它。迄今为止,我最喜欢的解决方法是向 SQLCMD 传递 ASCII "Unit Separator",它是十六进制 0x1F,并且可以通过键入 Ctrl-_ 在命令行中输入(控制下划线,在美式键盘上变为 ctrl -shift-\\'-\\'(键盘顶行 \\'0\\' 旁边的 \\'-\\')。

    使用 \\'Unit Separator\\' 的优点是极不可能出现在任何描述的文本中,并且是专门为此目的而设计的(请参阅 https://en.wikipedia.org/wiki/分隔符)

    已经让 SQLCMD 为我做这件事,然后我通过一个 Unix 风格的翻译命令将它的输出管道化为:

    1
    tr '\\037' '\\t'

    \\'Unit Separator\\' 的 \\\\\\\\037 是八进制,\\\\\\\\t 代表制表符,\\'tr\\' 将为我们翻译这两者,我们不需要依赖我们脚本或 shell 中的任何引用技巧。

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

    将两者放在一起我们得到:

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

    这将为您提供带有标签的输出。

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


    与上面发布的答案类似,但它更简单,我认为很重要。

  • 打开你的文本编辑器
  • Tab
  • 突出显示创建的空白块(选项卡)
  • 将其复制并粘贴到 SQL 命令中的位置
  • 即使这个制表符表示为一大块空白,它也是一个字符。

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


    要在命令提示符窗口中而不是在批处理文件中工作,这是我发现解决它的唯一方法:

    sqlcmd -S ServerName -E -d database_Name -Q"select col1, char(9), col2, char(9), col3, char(9), col4, char(9), col5 from mytable" -o 结果.txt -W -w 1024 -s " -m 1


    我在尝试在终端上运行 sqlcmd 时遇到了这个问题。我通过输入制表符使其工作(从文本编辑器复制对我不起作用)。

    按 cntrl v 然后按 tab。

    如何在命令行输入制表符?


    尝试在 cmd.exe 或 powershell 中使用水平滚动条。右键快捷方式并单击属性以重复使用,或右键单击标题栏并打开后单击属性然后单击布局选项卡。在屏幕缓冲区大小中,将宽度和高度设置为 8000,然后取消选择在调整大小时换行输出(重要)。单击然后通过单击旁边的按钮以最小化来恢复。您应该看到水平和垂直滚动条。您现在可以最大化窗口并在任何方向滚动。现在您可以看到数据库中的所有记录。


    CHAR(9):

    中使用动态 sql

    1
    SET @cmd ='SQLCMD -S MyServer -d MyDatabase -E -W -Q"SELECT * FROM MyTable" -s"' + CHAR(9) + '" -o"MyFilePath.txt"'

    如果在 Linux 上,这将作为 -s (col_separator)

    -s "$(printf "t" | tr \\'t\\' \\'\\\\\\\\t\\')" 或

    SQLCMDCOLSEP="$(printf "t" | tr \\'t\\' \\'\\\\\\\\t\\')" sqlcmd -S ...


    tldr:使用 ALT+009 ascii 制表符代码作为分隔符

    在示例中,将 {ALTCHAR} 替换为 ALT+009(按住 ALT 键并输入数字 009)

    1
    sqlcmd -E -d tempdb -W -s"{ALTCHAR}" -o junk.txt -Q"select 1 c1,2 c2,3 c3"

    编辑 junk.txt。选项卡将位于列之间。

    对于其他命令行选项:

    1
    sqlcmd -?

    注意:shell 会将 ALT 字符转换为 ^I,但如果您通过键入 -s "^I" 来尝试该命令,您将不会得到相同的结果。


    要使用 sqlcmd 实现此目的,您需要使用 Tab 字符,如下所示:\\\\\\\\t
    使用制表符分隔符将单个 sql 数据库表导出到文本文件的示例查询如下:

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

    有关关于sql server:SQLCMD中如何使用TAB作为列分隔符的更多相关文章

    1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

      我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

    2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

      总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

    3. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

      我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

    4. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

      类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

    5. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

      很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

    6. ruby - 在 Ruby 中使用匿名模块 - 2

      假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

    7. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

      我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

    8. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

      关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

    9. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

      给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

    10. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

      我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

    随机推荐