【问题标题】:SQL REPLACE giving error: 'String or binary data would be truncated.'SQL REPLACE 给出错误:“字符串或二进制数据将被截断。”
【发布时间】:2012-08-14 14:48:26
【问题描述】:

我正在尝试仅替换我们公司数据库中字符串的一部分。我要更新的列是MERGECODES (varchar(20),null)。该列的典型值类似于'M, GPE, T'

我想用KD 替换T 的每个实例,但出现以下错误。它将允许我更改具有相同或更少字符数的任何内容,例如,它将允许我将 T 替换为 K 而不是 KD。任何帮助将不胜感激。谢谢大家!

代码:

UPDATE GoldMine.dbo.CONTACT1 
SET MERGECODES = REPLACE(MERGECODES, 'T', 'KD')

错误:

消息 8152,第 16 层,第 14 州,第 1 行
字符串或二进制数据将被截断。 声明已终止。

【问题讨论】:

  • 如果您在varchar(20) 列中确实有M, GPE, T,并且您执行您的REPLACE - 它可以正常工作。我认为您可能正在更新 太多行,并且您的UPDATE 语句命中的行中至少有一行在该列中包含太多字符,REPLACE 无法正常工作。尝试使用 WHERE id = 42 或其他子句 - 为了更新 仅一行,您知道这是可以的。
  • 感谢 marc_s 说得通。
  • 为什么有人对这个问题投了反对票?如果我在这里做错了什么,请告诉我。

标签: sql-server replace truncate


【解决方案1】:

您需要增加数据类型大小。

目前你有varchar(20)

如果数据长度为 20 个字符,并且您将 1 个字符替换为 2 个字符,那么这将是 21 个字符长,这将导致 truncation

例如,尝试将您的数据类型增加到varchar(50),这应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多