Nvarchar列值加倍,如何检测并修复此问题?

时间:2013-09-03 18:46:41

标签: sql sql-server

我继承了一个项目,该项目在某种程度上以应用程序设置表中的随机行结束了重复。我成功删除了重复的行,但后来我注意到所有行的类型为nvarchar的实际值也是重复的。

例如,一行包含键列Error Email Address和值列websupport@mycompany.com,websupport@mycompany.com。 “值”列应包含websupport@mycompany.com。像这样的记录很多,都遵循The value,The value的相同模式。

如何检测“值”列何时包含此类重复数据并进行更正?

请注意,单独使用逗号并不足以说明该行无效,因为密钥Default Error MessageOops, something went wrong之类的内容是正确的,并且还包含逗号。

4 个答案:

答案 0 :(得分:3)

这是一个可以解决问题的update

update t
    set value = left(value, len(val)/2)
    where left(value, len(val)/2) = right(value, len(val)/2) and
          substring(value, (len(val)/2) + 1, 1) = ',';

您可以先执行select验证逻辑:

select value
from t
where left(value, len(val)/2) = right(value, len(val)/2) and
      substring(value, (len(val)/2) + 1, 1) = ',';

答案 1 :(得分:1)

以下是查询:

Update TableName
set Col1=substring(Col1,0,charindex(',',Col1))
where substring(Col1,0,charindex(',',Col1))=substring(Col1,charindex(',',Col1)+1,500)

将Col1替换为列名,将TableName替换为实际的表名。它只会替换逗号(,)之前和之后的值与单个值相同的行。

答案 2 :(得分:0)

从blah中选择*,其中包含'%@%,%@%'

等电子邮件

对于如何插入错误数据,您似乎还有其他问题需要处理。

答案 3 :(得分:0)

我会尝试类似https://stackoverflow.com/a/5123680/1504882的地方你要在列上拆分列,当Left = Right时,将列更新为(无论你选择什么,左/右)