我在SQL Server 2008上,我有一个包含大量数据的字段。当我申请......
DATALENGTH(field_name)
...我知道我的字段长度为288.946个字符,但在MS SQL Server Management Studio上,当我尝试将该字段的简单SELECT结果复制粘贴到文本编辑器(记事本+)时,看起来SQL Server只包含43.679个字符...或者是否在Windows中复制文本的缓冲区正在吹出最大字符数?我已经测试了,限制不是记事本+行大小或其他...如果我复制粘贴到SQL Server中的新查询窗口,结果是相同的文本字符串限制为43.679个字符。
嗯,问题是:我需要复制粘贴该字段的全部内容......我的查询中应该做些什么特别的事情吗?谢谢。
答案 0 :(得分:4)
我在SQL Server 2008的测试期间提出了一个针对此问题的错误。他们将其关闭为“已修复”但后来评论说它是Vista问题的副本。这令我感到惊讶,因为它出现在其他几个SSMS /操作系统组合中,包括Windows 7上的Denali CTP1。
所以,我不确定为什么他们把它称为固定,因为它肯定仍然是一个真正的限制。
如果你有< 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)
答案 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。