【问题标题】:How to get the content of a huge field in SQL Server?如何获取 SQL Server 中一个巨大字段的内容?
【发布时间】:2023-03-31 23:34:01
【问题描述】:

我已经使用 SQL Server 2008,并且我有一个包含大量数据的字段。当我申请时...

DATALENGTH(field_name)

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

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

【问题讨论】:

  • 您可以尝试将查询结果直接保存到文件中吗?
  • Aaron,我总是接受带来解决方案或至少是最佳可用解决方案的答案,并且您发送了一个非常好的答案来解决我的问题。谢谢!我建议您查看我的帖子的历史记录,看看我在说什么。有时我只是在发送问题后没有坐在这里,但可以肯定的是,我稍后会回来从该论坛用户提供的出色答案中获利,批准最佳答案并投票给所有对我也有帮助的答案。

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


【解决方案1】:

我在 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

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

如果您有

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;

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

【讨论】:

  • 非常感谢您的详细描述!最好的问候。
  • 怎么样:DECLARE @txt varchar(max) SET @txt = (SELECT TOP 1 someText from tblTest) print @txt
  • Magnus,你试过这个吗? PRINT 具有 8000 个字符的内置限制,因此简单地打印结果是行不通的,原因与简单地选择结果是行不通的原因大致相同。
【解决方案2】:

如果您将 FOR XML AUTO 添加到您的查询中,并将结果与​​ Grid 一起运行,您将获得一个包含 TEXT 字段的全部内容的 XML 结果。

例如

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。

【讨论】:

  • 如果列的内容是XML,这很痛苦。
【解决方案3】:

如图here可以安装插件SSMSBoost复制文字

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 2014-06-22
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多