2

我继承了一个项目,该项目以某种方式最终导致应用程序设置表中的随机行重复。我成功删除了重复的行,但后来我注意到 nvarchar 类型的实际值也重复了。

例如,一行有 Key 列Error Email Address和 Value 列websupport@mycompany.com,websupport@mycompany.com。Value 列应该只包含websupport@mycompany.com. 有很多这样的记录,都遵循相同的模式The value,The value

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

请注意,仅逗号不足以说明该行无效,因为键值之类的内容Default Error MessageOops, something went wrong正确的并且还包含逗号。

4

4 回答 4

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) = ',';
于 2013-09-03T18:56:01.580 回答
1

这是查询:

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

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

于 2013-09-03T19:00:58.897 回答
0

select * from blah where email like '%@%,%@%'

关于如何插入不良数据,您似乎还有其他问题需要处理。

于 2013-09-03T18:54:57.827 回答
0

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

于 2013-09-03T18:56:09.730 回答