我正在尝试在运行SQL Server 2005的Windows计算机上使用sqlcmd将查询写入到csv文件。我们通常使用的命令行选项是:
-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
我最终通过使用“ -y0”参数解决了这个问题。它仍然留下了一堆空格,但看起来好像只到达了每个字段中最长数据的末尾。
然后,我通过一个删除重复空间并解决了所有问题的程序来运行输出。