SQL如何基于指定行字段值生成对应固定的UniqueIdentifier值
同字段相同值映射唯一ID实现方案
你当前使用的UPDATE ROW2 SET ROW2 = NEWID(); 语句会为每一行单独生成新的GUID,所以相同ROW1值也会拿到不同ID。要实现相同ROW1对应同一个唯一ID,可通过预生成ROW1和GUID的映射关系后关联更新,不同数据库实现如下:
SQL Server 实现
WITH ROW1_GUID_Map AS ( SELECT ROW1, NEWID() AS SharedGUID FROM 你的实际表名 GROUP BY ROW1 ) UPDATE t SET t.ROW2 = m.SharedGUID FROM 你的实际表名 t INNER JOIN ROW1_GUID_Map m ON t.ROW1 = m.ROW1;
这段语句会先为每一个唯一的ROW1值生成对应的唯一GUID,再通过关联更新对应所有相同ROW1的行,保证ROW1值相同的行拿到同一个GUID。
MySQL 实现
MySQL中使用UUID()代替SQL Server的NEWID(),语句如下:
UPDATE 你的实际表名 t1 JOIN ( SELECT ROW1, UUID() AS SharedGUID FROM 你的实际表名 GROUP BY ROW1 ) t2 ON t1.ROW1 = t2.ROW1 SET t1.ROW2 = t2.SharedGUID;
注意事项
- 执行更新操作前建议先备份原表数据,也可以先单独执行内层的映射查询,验证映射关系是否符合预期
- 需将上述语句中的
你的实际表名替换为你自己的表名称 - 如果后续新增数据也需要遵循相同规则,可新增触发器逻辑:新增数据时先判断ROW1是否已存在,存在则复用已有GUID,不存在则生成新的GUID存入ROW2。
内容的提问来源于stack exchange,提问作者Harsh Bilodiya
相关产品推荐
相关产品推荐

