9

SQL Server 2005 を実行している Windows マシンで sqlcmd を使用して、csv ファイルにクエリを書き込もうとしています。通常使用するコマンド ライン オプションは次のとおりです。

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

ただし、列は 256 バイトで切り捨てられています。これを回避するために、-W の代わりに次のコマンド ライン オプションを使用してみました。

-y 8000

これによりフィールド全体がキャプチャされますが、この方法の問題は、すべての余分なスペースのためにファイルが 1 メガバイト強から約 200 メガバイトに膨らむことです (8000 はおそらくやり過ぎだと思いますが、おそらく少なくとも 4000 である必要があり、私は現在、データの小さなサブセットのみを扱っています)。-W オプションは通常、この余分なスペースをすべて削除しますが、それらを一緒に使用しようとすると、相互に排他的であることがわかります。

この制限を回避する方法はありますか、または別のプログラム (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
4

1 に答える 1

19

「-y0」引数を使用してこれを解決しました。まだたくさんの空白が残っていますが、各フィールドで最も長いデータの最後まで行ったようです。

次に、繰り返しスペースを削除し、すべての問題を解決するプログラムで出力を実行しました。

于 2011-05-31T18:37:47.463 に答える