如何获取SQL Server中一个巨大字段的内容?

时间:2011-07-04 21:17:50

标签: sql sql-server sql-server-2008

我在SQL Server 2008上,我有一个包含大量数据的字段。当我申请......

DATALENGTH(field_name)

...我知道我的字段长度为288.946个字符,但在MS SQL Server Management Studio上,当我尝试将该字段的简单SELECT结果复制粘贴到文本编辑器(记事本+)时,看起来SQL Server只包含43.679个字符...或者是否在Windows中复制文本的缓冲区正在吹出最大字符数?我已经测试了,限制不是记事本+行大小或其他...如果我复制粘贴到SQL Server中的新查询窗口,结果是相同的文本字符串限制为43.679个字符。

嗯,问题是:我需要复制粘贴该字段的全部内容......我的查询中应该做些什么特别的事情吗?谢谢。

3 个答案:

答案 0 :(得分:4)

我在SQL Server 2008的测试期间提出了一个针对此问题的错误。他们将其关闭为“已修复”但后来评论说它是Vista问题的副本。这令我感到惊讶,因为它出现在其他几个SSMS /操作系统组合中,包括Windows 7上的Denali CTP1。

http://connect.microsoft.com/SQLServer/feedback/details/344150/ssms-grid-will-not-display-43-679-characters-from-varchar-max

所以,我不确定为什么他们把它称为固定,因为它肯定仍然是一个真正的限制。

如果你有< 64K,您可以转换为XML,然后在网格模式下单击结果。不幸的是,除了这些之外,您还可以轻松获得SSMS能够为您提供的服务。您需要像其他人建议的那样导出到平面文件,使用不同的程序来完整地提取数据,或者手动粘贴40000个字符的块。在您的示例中,您可以执行以下操作:

DECLARE @foo TABLE (a VARCHAR(MAX));

INSERT @foo(a) SELECT REPLICATE('A', 8000);

DECLARE @i INT = 1;

WHILE @i < 36
BEGIN
    UPDATE @foo SET a += REPLICATE(CHAR(@i+64), 8000);
    SET @i += 1;
END

SELECT DATALENGTH(a), a FROM @foo;

SELECT SUBSTRING(a, 1, 40000),
    SUBSTRING(a, 40001, 40000),
    SUBSTRING(a, 80001, 40000),
    SUBSTRING(a, 120001, 40000),
    SUBSTRING(a, 160001, 40000),
    SUBSTRING(a, 200001, 40000),
    SUBSTRING(a, 240001, 40000),
    SUBSTRING(a, 280001, 40000)
FROM @foo;

但您必须通过为值为&gt;的列添加更多操作来进行调整。 320K。

答案 1 :(得分:1)

如图here所示,您可以安装插件SSMSBoost来复制文本

答案 2 :(得分:0)

如果将FOR XML AUTO添加到查询中,并将结果运行到Grid,则会获得包含TEXT字段的全部内容的XML结果。

e.g。

SELECT large_field FROM MyTable --Limited to 65535 characters in Grid
SELECT large_field FROM MyTable FOR XML AUTO --Limited to 2G characters in Grid in XML format

然后,您可以从SSMS中的XML编辑器窗口复制内容,并从您感兴趣的结果中删除XML。