在SQLServer2005中,我试图查询一个varchar(max)列,该列的某些行的文本数据超过了8192。然而,在managementstudio中,我在tools-->options-->query results-->results to text-->max number of characters displayed in each column=8192(这是一个最大值)。因此,对这些行的截断似乎只是由于文本输出所施加的限制。
我看到的唯一能绕过这个问题的方法是使用子串函数来抓取前8000个字符,然后再抓取下8000个字符等等。但是这很难看,而且容易出错。
我应该提到ssis和bcp不是我的选择。
有人有更好的建议吗?谢谢!
10条答案
按热度按时间50pmv0ei1#
您可以将数据导出到不会被截断的平面文件中。为此:
右键单击数据库
单击任务->导出数据
选择您的数据源(默认值可以)
选择“平面文件目标”作为目标类型。
为输出选择一个文件名。
在“指定表副本或查询”中,选择“编写查询以指定要传输的数据”
粘贴到查询中
剩下的步骤应该不言自明。这将把文件输出为文本,你可以在你喜欢的文本编辑器中打开它。
zi8p0yeb2#
我也使用xml,但这是一种稍微不同的方法,可以解决xml实体化的大多数问题。
确保ssms中的“xml数据”限制设置得足够高!
5t7ly7z53#
我的解决方案有点周而复始,但让我达到了目的(只要输出少于65535个字符):
在sql management studio中,将网格结果的限制设置为65535(工具>选项>查询结果>sql server>结果到网格>非xml数据)
运行查询,输出到网格
右键单击结果,选择“将结果另存为…”,然后将结果保存到文件中
在记事本或类似工具中打开文件以获取输出
更新:为了证明这是可行的,这里有一些sql选择一个100000字符的列。如果我将网格输出保存到一个csv文件中,所有100000个字符都在那里,没有截断。
笔记:
正如我最初所想,字符长度的设置似乎没有任何区别。
我使用的是sql2008r2(服务器和managementstudio)
如果长列存储在局部变量中(如本例所示),或者从实际的表中选择,似乎没有什么区别
8xiog9wr4#
你试过这个简单的方法吗?只需点击2下!
在查询窗口,
将查询选项设置为“结果到网格”,运行查询
右键单击网格角的“结果”选项卡,将结果另存为任何文件
你将得到所有的文本,你想看到的文件!!!对于varchar(max)字段的结果,我可以看到130556个字符
omjgkv6w5#
我在尝试导出xml时遇到了这个问题。这是我使用的解决方案:
选择“结果到网格”选项,右键单击“结果”窗格中显示的链接,然后选择“结果另存为”,选择“所有文件”文件类型,为文件命名,然后单击“保存”。所有xml数据都正确地保存到一个文件中。
我用的是ssms10,但我不能让托瑞的解决方案起作用。导出向导一直认为输入列是图像:
“input column”xml_f52e2b61-18a1-11d1-b105-00805f49916b“(26)”的数据类型是dt_image
pftdvrlh6#
在ssms中,如果您从一行中选择数据,它将被限制为少量字符,但如果您编辑一行中的数据,则会出现完整值。它可能并不总是在那里,但是如果你按ctrl-a,ctrl-c然后在编辑器中通过它,它就会全部在那里。
quhf5bfb7#
如果给我一个选择,我会让查询以“for xml auto”或“for xml raw”或“for xml explicit”的形式返回数据,这样限制会更高,您可以对输出的结果做更多的处理。
zour9fqk8#
我通常使用xml获得巨大的调试字符串作为输出(使用luke的测试工具):
68bkxrlz9#
另一个解决方法是,使用heidisql来处理这个棘手的查询。它没有野外长度的限制。
7qhs6swi10#
您所说的截断只发生在managementstudio中。如果您将列拉入另一个应用程序,它将不会被截断。
您不可能使用查询分析器与SQLServer2005对话。你是说管理工作室吗?