我想在现有的旧数据库中添加一个列,并编写一个过程,通过该过程我可以为每个记录分配不同的值。像添加一个列并为其自动生成数据的东西。
就像,如果我添加一个名为“ID”(数字)的新列,我想为每个记录初始化一个唯一值。所以,我的ID列将有1到1000的记录。我该怎么做?
答案 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()