2015-06-25 142 views
3

我有一個有兩列的表,其中沒有列是唯一的。我需要爲每個用戶分別自動遞增列numberSQL Server:分別自動增加字段

user | number 
1 | 1 
2 | 1 
1 | 2 
3 | 1 

我想出的唯一想法是搜索最後使用的數字並手動遞增1。有沒有更高效的方法?

+1

您可以編寫一個計算自動增量的函數,並使[number]成爲調用函數的計算列。 –

+5

創建一個單獨的表,保存每個用戶的數量,如果您的當前表的行數比用戶多得多,則可以更好地保留每個用戶的數字 –

回答

4

取而代之的是number場,您可以在表中創建一個auto increment場(我稱之爲id),並通過查詢獲取所需的number

第一添加ID:

alter table table_name add id int not null IDENTITY(1,1) 

您不需要數字字段了:

alter table table_name drop column number 

查詢得到number(you c一個使用它來創建一個視圖):

select user, 
row_number() over(partition by user order by id) as number 
from table_name 
1

搜索用戶最大值並增加它。

INSERT INTO YOUR_TABLE (user, number) 
SELECT (MAX(number) + 1) 
FROM YOUR_TABLE 
WHERE user = USER_ID 

自動遞增的術語只覆蓋主鍵自動遞增。有關更多信息,請參閱this page

+2

'只有主鍵'我不會那麼肯定。我可以使用自動增加的值來設置非PK列 –

+1

OP已經觀察到這是一個選項,正在尋找其他人。 –

+0

這可以工作,直到遇到併發問題。 –

1

您可以通過兩種查詢做到這一點,如:

userno - 在要插入

第一次寫入整數的用戶ID(查詢1)也就是說,如果userno已經存在於表:

insert into table_name 
select userno,count(*) from table_name where user = userno 
group by user; 

如果它返回一個空行,然後簡單的寫(查詢2),即它要插入一個新的用戶:

insert into table_name values(userno,1);