在现有表中添加一列,并在MS SQL Server上对其进行唯一编号


121

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

就像,如果我添加一个名为“ ID”(数字)的新,那么我想为每个记录初始化一个唯一值。因此,我的ID 将包含来自say的记录1 to 1000
我怎么做?


2
这将是特定于数据库的。您应该指定要使用的数据库。
dvorak

1
您应该编辑问题以提及这一点。
dvorak

Answers:


221

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

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

5
效果很好,并自动添加了我需要的所有数字。谢谢!
djangofan 2011年

9
如果您在使用Management Studio gui进行更改时遇到问题,则可以在/ Tools / Options / Designer / Table和Database Desiger下更改设置,您会发现一个Prevent saving changes that require table re-creation取消选中该复选框的复选框,即使使用桂
surfmuggle 2012年

22

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

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

但不确定是否追溯应用这些值。如果不是这样,您应该只能够使用存储过程或简单程序(只要没有其他人正在向数据库写入数据)来遍历您的值,并使用该LAST_INSERT_ID()函数进行设置以生成id值。


7
我也可以确认这确实适用于MySQL。我只是将一个递增的id字段添加到现有的未索引表中,并且每一行都有一个唯一的新id。
Doug Kavendek 2011年

对不起,它是一个旧的,但确实在标题中说了SQL Server。
尼克

11

对于oracle,您可以执行以下操作

alter table mytable add (myfield integer);

update mytable set myfield = rownum;

8

与Postgres等效(仅当您希望“ id”为键时,第二行才是必需的):

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


3

对于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);

0

取决于数据库,因为每个数据库都有添加序列号的不同方法。我会更改表以添加列,然后在groovy / python / etc中编写一个db脚本以读取数据并使用序列更新id。设置完数据后,我将在表中添加一个序列,该序列从最高编号开始。设置数据后,请正确设置主键。


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()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.