将列添加到现有表并对其进行唯一编号

Adh*_*pta 118 sql sql-server

我想在现有的遗留数据库中添加一个列,并编写一个过程,通过该过程我可以为每个记录分配不同的值.像添加列并为其自动生成数据之类的东西.

就像,如果我添加一个名为"ID"(数字)的新列,我想为每个记录初始化一个唯一值.所以,我的ID列将有1到1000的记录.我该怎么做?

Sim*_*son 208

这取决于数据库,但对于SQL Server,这可以通过以下方式实现:

alter table Example
add NewColumn int identity(1,1)
Run Code Online (Sandbox Code Playgroud)

  • 如果您在使用管理工作室gui进行更改时遇到问题,可以更改/ Tools/Options/Designer/Table和Database Desiger下的设置,您将找到一个复选框"防止保存更改,需要重新创建表格"取消选中该框,您将甚至可以使用gui添加标识列. (9认同)
  • 这很好用,并自动添加了我需要的所有数字.谢谢! (5认同)

Tom*_*tin 21

如果您发布了正在使用的SQL数据库,这将有所帮助.对于MySQL,您可能需要auto_increment:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY
Run Code Online (Sandbox Code Playgroud)

不确定这是否会追溯应用值.如果不是,您应该只能使用存储过程或简单程序迭代您的值(只要没有其他人正在写入数据库)并设置使用该LAST_INSERT_ID()函数来生成id值.

  • 我也可以确认这确实适用于MySQL; 我刚刚向现有的无索引表添加了一个递增的id字段,每行都有一个唯一的新id. (7认同)

Roy*_*ang 10

对于oracle你可以做类似下面的事情

alter table mytable add (myfield integer);

update mytable set myfield = rownum;
Run Code Online (Sandbox Code Playgroud)


Fla*_*ken 8

和Postgres等价(仅当你想要"id"作为键时,第二行才是强制性的):

ALTER TABLE tableName ADD id SERIAL;
ALTER TABLE tableName ADD PRIMARY KEY (id);
Run Code Online (Sandbox Code Playgroud)