向现有表中添加一列,并唯一编号

我想添加一列到现有的遗留数据库,并写一个过程,我可以为每个logging分配一个不同的值。 就像添加一列并自动生成数据一样。

就像,如果我添加一个名为“ID”(数字)的新列,我想然后初始化每个logging的唯一值。 所以,我的ID列将有从1到1000的logging。我该怎么做?

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

alter table Example add NewColumn int identity(1,1) 

这将有助于您发布您正在使用的SQL数据库。 对于MySQL,您可能需要auto_increment:

 ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY 

不知道这是否适用于追溯价值。 如果不是的话,你应该只能用存储过程或简单的程序迭代你的值(只要没有其他人正在写入数据库)并设置使用LAST_INSERT_ID()函数来生成id值。

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

 alter table mytable add (myfield integer); update mytable set myfield = rownum; 

只要使用ALTER TABLE应该可以工作。 添加与正确的types和IDENTITY标志的列,它应该做的伎俩

看看这个MSDN文章http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx关于ALTER TABLE语法

和Postgres相当(第二行是必须的,只有当你想要“ID”是一个关键):

 ALTER TABLE tableName ADD id SERIAL; ALTER TABLE tableName ADD PRIMARY KEY (id); 

取决于数据库,因为每个数据库都有不同的方法来添加序列号。 我会改变表添加列,然后编写一个数据库脚本在groovy / python /等读取数据和更新序列的ID。 一旦数据已经设置,我会添加一个序列到开头的数字后面的表。 一旦数据已经设置,正确设置主键。

如果您不希望新列的types为IDENTITY (自动增量),或者您希望具体说明行的编号顺序,则可以添加一个types为INT NULL的列,然后将其填充为这个。 在我的示例中,新列被称为MyNewColumn,表的现有主键列被称为MyPrimaryKey。

 UPDATE MyTable SET MyTable.MyNewColumn = AutoTable.AutoNum FROM ( SELECT MyPrimaryKey, ROW_NUMBER() OVER (ORDER BY SomeColumn, SomeOtherColumn) AS AutoNum FROM MyTable ) AutoTable WHERE MyTable.MyPrimaryKey = AutoTable.MyPrimaryKey 

这适用于SQL Sever 2005及更高版本,即支持ROW_NUMBER()