向现有表中添加一列,并在 MSSQLServer 上对它们进行唯一编号

我想添加一个 专栏到现有的遗留 资料库并编写一个 程序,通过它我可以为每个记录分配一个不同的值。比如添加一个 专栏并为其自动生成数据。

类似地,如果我添加一个名为“ ID”(number)的新 专栏,我希望随后为每条记录初始化一个唯一的值。因此,我的身份证 专栏将有记录从说 1 to 1000
我该怎么做?

261508 次浏览

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

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

只需使用 ALTERTABLE 即可。添加具有适当类型和 IDENTITY 标志的列应该就可以了

请查看关于 ALTERTABLE 语法的 MSDN 文章 http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx

取决于数据库,因为每个数据库都有添加序列号的不同方法。我将修改表来添加列,然后在 groovy/python/etc 中编写一个 db 脚本来读入数据并用一个序列更新 id。一旦数据被设置,我将添加一个序列到表中,该序列从最上面的数字之后开始。设置数据后,正确设置主键。

你可以做一些像下面这样的事情

alter table mytable add (myfield integer);


update mytable set myfield = rownum;

如果你发布了你正在使用的 SQL 数据库,它将会有所帮助:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

Not sure if this applies the values retroactively though. If it doesn't you should just be able to iterate over your values with a stored procedure or in a simple program (as long as no one else is writing to the database) and set use the LAST_INSERT_ID() function to generate the id value.

Postgres 等价物(第二行是强制性的,只有当你希望“ id”是一个键时) :

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

如果不希望新列的类型为 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

这适用于 SQLServer2005及更高版本,即支持 ROW_NUMBER()的版本

对于 sql 服务器中的 UNIQUEIDENTIFIER 数据类型,请尝试这样做

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

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

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