将重复的 varchar 更新为在 SQL 数据库中唯一
我需要更改数据库以在表列上添加唯一约束,但其中的 VARCHAR 数据不是唯一的。
如何通过在现有数据末尾添加序列号来更新这些重复记录,以便每个值都是唯一的?
例如,我想将“名称”更改为“名称1”、“名称2”、“名称3”
I need to change a database to add a unique constraint on a table column, but the VARCHAR data in it is not unique.
How can I update those duplicate records so that each value is unique by adding a sequential number at the end of the existing data?
e.g. I would like to change 'name' to 'name1', 'name2', 'name3'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
以下是使用 MS SQL SERVER 风格的 sql 的 2 个示例。
设置示例:
Sql 2005\2008:(计算表表达式)
Sql 2000:(光标示例)
我回滚了每个更新,因为我的脚本文件包含这两个示例。 这使我能够在不重置表上的行的情况下测试功能。
Here are 2 examples with using the MS SQL SERVER flavor of sql.
Setup Example:
Sql 2005\2008: ( Computed Table Expression )
Sql 2000: (Cursor example)
I rolled back each of the updates because my script file contains both examples. This allowed me to test the functionality without resetting the rows on the table.
在表上打开一个游标,按该列排序。 保留一个初始化为 null 的前一个值变量和一个初始化为 0 的索引变量。如果当前值 = 前一个值,则递增索引并将索引附加到字段值。 如果当前值<> 之前的值,将索引重置为 0 并保持字段值不变。 设置前一个值变量=当前值。 移至下一行并重复。
Open a cursor on the table, ordered by that column. Keep a previous value variable, initialized to null, and an index variable initialized to 0. If the current value = the previous value, increment the index and append the index to the field value. if the current value <> the previous value, reset the index to 0 and keep the field value as is. Set the previous value variable = the current value. Move on to the next row and repeat.
您可以向其中添加另一列...例如
将 id 替换为使 mycolumn 独一无二的任何列
You could add another column to it... like
replace id with whatever column makes mycolumn unique
你使用什么数据库?
在 Oracle 中,有一个:
NOVALIDATE 验证更改,但不验证先前存在的数据表中
示例:
如果您不使用 Oracle,则检查相应数据库的 SQL 参考。
What database are you using?
In Oracle there is a:
NOVALIDATE Validates changes but does not validate data previously existing in the table
Example:
If you are not using Oracle then check the SQL reference for your respective database.