sqlcmd - 如何在没有空格的情况下绕过列长度限制?

时间:2011-05-06 20:52:01

标签: sql sql-server sqlcmd batch-file

我正在尝试在运行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

1 个答案:

答案 0 :(得分:17)

我最后通过使用“-y0”参数来解决这个问题。它仍然留下了一堆空白,但看起来它只是到了每个字段中最长的数据的末尾。

然后我通过删除重复空格的程序运行输出,并解决了所有问题。