行和和不区分大小写



如果有一个包含数千个village的表,当然会有重复的。为了使用它们作为映射表,有必要对它们进行相应的标记。

表如下;

<表类> id 国家 名称 notUnique tbody><<tr>1234567秘鲁阿雷纳空1234568墨西哥阿雷纳空1234569洪都拉斯阿雷纳空1234570美国帕萨迪纳空1234571加拿大道明> 萨迪纳空1234572菲律宾帕萨迪纳空1234573波兰Susk Nowy空

正如@TimBiegeleisen所提到的,您应该使用不区分大小写的排序。

但是你可以用一个可更新的CTE更简单地做到这一点

WITH osm AS (
SELECT *,
COUNT(*) OVER (PARTITION BY (name COLLATE Latin1_General_CI_AI)) RowSum
FROM Mapping.dbo.OsmGlobal osm
)
UPDATE osm
SET
notUnique = 1
WHERE osm.RowSum > 1;

我将在name列上使用COLLATE,以及存在的逻辑:

UPDATE Mapping.dbo.OsmGlobal o1
SET notUnique = 1
WHERE EXISTS (SELECT 1 FROM Mapping.dbo.OsmGlobal t2
WHERE t2.name COLLATE Latin1_General_CI_AI =
t1.name COLLATE Latin1_General_CI_AI AND
t2.id <> t1.id);

用简单的英语来说,上面的查询说,对于我们可以找到具有相同名称的任何记录(不同的id),将notUnique标志设置为1,如使用Latin1_General_CI_AI进行整理。

最新更新