【问题标题】:SSMS and SQLCMD displays only the first 8000 charactersSSMS 和 SQLCMD 仅显示前 8000 个字符
【发布时间】:2009-09-01 19:50:28
【问题描述】:

当我尝试执行时在 SSMS 中:

SELECT CONVERT(VARCHAR(MAX), REPLICATE('a',9000))    

我只看到显示的前 8000 个字符。设置Tool >> Options >> Query Results >> Sql Server >> Results to Grid设置为65534,Results to Text设置为8192。

当我尝试从 SQLCMD

运行它时
sqlcmd -S Server -E -y 0 -Q "SELECT CONVERT(VARCHAR(MAX), REPLICATE('a',9000))" -o out.txt

我只看到 8000 个字符。

标志 -y 0 应该将其设置为 1 MB。但是我不超过8000个字符。

可能是什么问题?

谢谢,
_UB

【问题讨论】:

    标签: sql-server-2005 ssms sqlcmd


    【解决方案1】:

    REPLICATE 输出基于数据类型输入。所以这就解释了sqlcmd。

    如果字符串表达式不是 varchar(max) 或 nvarchar(max) 类型, REPLICATE 截断返回值 8,000 字节。返回值 大于 8,000 字节, 字符串表达式必须显式 转换为适当的大值 数据类型。

    所以,使用这个SELECT REPLICATE(CONVERT(VARCHAR(MAX), 'a'), 9000)

    SSMS 从未显示所有文本数据(查询分析器也没有)

    【讨论】:

    • 啊……复制。我知道。只是发帖前没有想到。我的错。感谢您的回复。
    【解决方案2】:
    【解决方案3】:

    VARCHAR(MAX) 只能容纳 8000 个字符

    see here

    来自 MSDN:

    varchar [ ( n | max ) ] - 可变长度的非 Unicode 字符 数据。 n 可以是从 1 到 8,000。 max 表示最大值 存储大小为 2^31-1 个字节

    正如 Joseph(下文)所说,要保存更多内容,请使用 text 或 ntext 数据类型,但如果您希望能够对其进行搜索,则需要启用某种形式的全文索引。

    Better Link

    【讨论】:

    • varchar(max) 是 LOB 类型!您的报价实际上是说“max 表示最大存储大小为 2^31-1 字节”
    • 我对不良链接的应用,请参阅此处doc.ddart.net/mssql/sql70/da-db_1.htm 以获取完整布局。此外,这是存储大小,而不是最大字符数。
    • 更糟糕的是:新链接适用于没有 varchar(max) 的 SQL 7,它替换文本数据类型
    • 真的吗?我记得之前在 VARCHAR(MAX) 中存储了 8000 多个字符。据我所知,它最多可以存储 2 GB 数据。
    • 来自BoL:max表示最大存储大小为2^31-1字节
    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多