【问题标题】:How to pass large string_replacement in SQL Replace function如何在 SQL 替换函数中传递大字符串替换
【发布时间】:2020-01-09 17:19:52
【问题描述】:

我正在尝试用 SQL 中的现有字符替换非常大的字符,如下所示

select REPLACE('main context', 'text', 'CharactersOver8000')

它会抛出以下错误

String or binary data would be truncated.

我尝试将整个替换转换为 nvarchar(max) 但它不起作用。有什么建议吗?目前它在 SQL2012 上

【问题讨论】:

  • 嗯。你有没有试过在replace()之前投。
  • 来自 Docs Online 如果 string_expression 的类型不是 varchar(max) 或 nvarchar(max),REPLACE 会在 8,000 字节处截断返回值。要返回大于 8,000 字节的值,必须将 string_expression 显式转换为大值数据类型。
  • 我相信你指的是docs.microsoft.com/en-us/sql/t-sql/functions/…它说的是string_expression,但这里我指的是string_replacement

标签: sql sql-server replace


【解决方案1】:

这个错误信息的原因是什么?


来自Docs Online

如果 string_expression 不是 varchar(max) 或 nvarchar(max) 类型,REPLACE 会在 8,000 字节处截断返回值。要返回大于 8,000 字节的值,必须将 string_expression 显式转换为大值数据类型。


解决办法是什么?


string_expression 在您的情况下是 'MainContext',因此您需要将其转换为 VARCHAR(MAX)NVARCHAR(MAX) 数据类型为

select REPLACE(CAST('main context' AS VARCHAR(MAX), 'text', 'CharactersOver8000')

【讨论】:

    【解决方案2】:

    在替换中进行转换应该可以工作。我刚刚测试了这个:

    SELECT REPLACE(CAST('MainContext' AS varchar(max)), 'text', '{8005 character string}')
    

    它奏效了。

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多