2008-09-20 102 views
97

我想向現有舊數據庫添加一列,然後編寫一個過程,通過該過程可以爲每條記錄分配一個不同的值。就像添加一列併爲其自動生成數據一樣。如果我添加一個名爲「ID」(數字)的新列,我想爲每個記錄初始化一個唯一值。所以,我的ID列將有從1到1000的記錄。我該怎麼做?向現有表添加一列,併爲其添加唯一編號

+2

這將是數據庫特定的。你應該指定你正在使用的數據庫。 – dvorak 2008-09-20 13:59:25

+0

我正在SQL Server中工作。 – 2008-09-20 14:04:10

+1

你應該編輯你的問題來提一提。 – dvorak 2008-09-20 14:07:54

回答

176

這將取決於數據庫上,但爲SQL Server,這可以實現如下:

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

這工作很好,並添加了我需要的所有數字自動。謝謝! – djangofan 2011-10-24 20:42:32

+7

如果您在管理工作室gui中進行更改時遇到問題,您可以更改/ Tools/Options/Designer/Table和Database Desiger下的設置,您將發現一個複選框`Prevent'保存需要重新創建表的更改`取消選中該框和您即使使用gui也能夠添加標識列。 – surfmuggle 2012-11-05 19:28:12

0

取決於數據庫的每個數據庫都有一個不同的方式來增加序列數字。我會改變表格來添加列,然後在groovy/python/etc中編寫一個數據庫腳本來讀取數據並使用序列更新id。一旦數據被設置,我會添加一個序列到頂部數字之後開始的表格。一旦數據已經設置好,請正確設置主鍵。

10

甲骨文你可以做類似下面

alter table mytable add (myfield integer); 

update mytable set myfield = rownum; 
19

,如果你發佈你所使用的SQL數據庫,這將有助於。對於MySQL你可能想要auto_increment:

ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY

不知道這是否適用於追溯值雖然。如果不是,你應該只能用存儲過程或簡單的程序迭代你的值(只要沒有其他人正在寫入數據庫)並設置使用LAST_INSERT_ID()函數來生成id值。

5

而且Postgres的當量(第二行是強制的前提是你想要的「ID」是一個關鍵):

ALTER TABLE tableName ADD id SERIAL; 
ALTER TABLE tableName ADD PRIMARY KEY (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()

0

在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);