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

时间:2008-09-20 13:57:14

标签: sql sql-server

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

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

8 个答案:

答案 0 :(得分:202)

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

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

答案 1 :(得分:20)

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

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

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

答案 2 :(得分:10)

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

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

答案 3 :(得分:7)

和Postgres等效(仅当你想要“id”作为密钥时,第二行才是强制性的):

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

答案 4 :(得分:4)

只需使用ALTER TABLE即可。添加具有正确类型和IDENTITY标志的列,它应该执行技巧

在ALTER TABLE语法

上查看此MSDN文章http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx

答案 5 :(得分:1)

对于sql server中的UNIQUEIDENTIFIER数据类型试试这个

Alter table table_name
add ID UNIQUEIDENTIFIER not null unique default(newid())

如果要从该列中创建主键,请使用此

ALTER TABLE table_name
ADD CONSTRAINT PK_name PRIMARY KEY (ID);

答案 6 :(得分:0)

取决于数据库,因为每个数据库都有不同的方法来添加序列号。我会改变表来添加列,然后在groovy / python / etc中编写一个db脚本来读入数据并用序列更新id。一旦设置了数据,我就会在顶部数字后面的表中添加一个序列。设置数据后,正确设置主键。

答案 7 :(得分:0)

如果您不希望新列的类型为IDENTITY(自动增量),或者您希望具体说明行的编号顺序,则可以添加一个类型的列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()

的版本