2011-05-06 41 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