我試圖使用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
什麼數據類型是截斷的數據嗎? – gbn 2011-05-08 18:53:01
我們使用stuff函數和FOR XML PATH命令的組合將多個nvarchar(500)字段連接到一個字段中。我不太確定他們是如何工作的(我們通過谷歌找到了解決方案),但我們最終將他們全部放在同一個領域,我們通過選擇語句將他們拉出來。我將編輯答案幷包含代碼。 – 2011-05-11 15:50:57