2010-09-30 171 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" 
相關問題