2011-05-06 39 views
7

我試圖使用SQLCMD運行SQL Server 2005在Windows計算機上編寫一個查詢到CSV文件。我們通常使用的命令行選項有:SQLCMD - 如何繞過列長度限制沒有空的空間?

-l 60 -t 300 -r 1 -b -W -h -1 

然而,列在得到256個字節截斷。在試圖規避這一點,我想到位-W使用此命令行選項:

-y 8000 

這捕獲整個領域,但該方法的問題是,從剛剛超過1MB的文件氣球起來約200MB,由於所有的額外空間(我知道8000可能是矯枉過正,但它可能將不得不至少爲4000,我目前只適用於數據的一小部分工作)。 -W選項通常會消除所有這些額外的空間,但是當我嘗試將它們一起使用時,它告訴我它們是互斥的。

有沒有繞過這個限制SQLCMD的方式,或有沒有人知道,如果其他程序(如bcp或OSQL)將簡化這個過程?


編輯: 這裏是我們使用得到多數民衆贊成被截斷的字段(類似的代碼被用於一串字段)的代碼片段:

SELECT ALIASES.AliasList as complianceAliases,  

。 ..

LEFT OUTER JOIN (Select M1.ID, M1.LIST_ID,stuff((SELECT '{|}' + isnull(Content2,'')+' '+isnull(Content3,'')+' '+isnull(Content4,'')+' '+isnull(Content5,'')+' '+isnull(Content6,'')+' '+isnull(Content7,'') 
            FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M2 with (nolock) 
            WHERE M1.LIST_ID = M2.LIST_ID and M1.ID = M2.ID and M1.TYPE = M2.TYPE          
            FOR XML PATH('') 
           ),1,1,'') as AliasList 
      FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M1 with (nolock) 
      WHERE M1.LIST_ID = 2001 AND M1.TYPE = 'Aliases' 
      GROUP BY m1.list_id,m1.ID,m1.Type) as ALIASES 
      ON ALIASES.LIST_ID = PAIR.COMP_LIST_ID AND ALIASES.ID = PAIR.COMP_ID 
+0

什麼數據類型是截斷的數據嗎? – gbn 2011-05-08 18:53:01

+0

我們使用stuff函數和FOR XML PATH命令的組合將多個nvarchar(500)字段連接到一個字段中。我不太確定他們是如何工作的(我們通過谷歌找到了解決方案),但我們最終將他們全部放在同一個領域,我們通過選擇語句將他們拉出來。我將編輯答案幷包含代碼。 – 2011-05-11 15:50:57

回答

12

我最終通過使用「-y0」參數解決了這個問題。它仍然留下一堆空白,但它看起來只是到了每個字段中最長的一段數據的末尾。

我然後通過除去重複的空間,並且解決了所有的問題的程序運行的輸出。

+0

不知道自那以後有更好的方法。正在搜索幾小時... – Adam 2017-11-22 15:19:27