我有一個有兩列的表,其中沒有列是唯一的。我需要爲每個用戶分別自動遞增列number
。SQL Server:分別自動增加字段
user | number
1 | 1
2 | 1
1 | 2
3 | 1
我想出的唯一想法是搜索最後使用的數字並手動遞增1。有沒有更高效的方法?
我有一個有兩列的表,其中沒有列是唯一的。我需要爲每個用戶分別自動遞增列number
。SQL Server:分別自動增加字段
user | number
1 | 1
2 | 1
1 | 2
3 | 1
我想出的唯一想法是搜索最後使用的數字並手動遞增1。有沒有更高效的方法?
取而代之的是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
搜索用戶最大值並增加它。
INSERT INTO YOUR_TABLE (user, number)
SELECT (MAX(number) + 1)
FROM YOUR_TABLE
WHERE user = USER_ID
自動遞增的術語只覆蓋主鍵自動遞增。有關更多信息,請參閱this page。
'只有主鍵'我不會那麼肯定。我可以使用自動增加的值來設置非PK列 –
OP已經觀察到這是一個選項,正在尋找其他人。 –
這可以工作,直到遇到併發問題。 –
您可以通過兩種查詢做到這一點,如:
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);
您可以編寫一個計算自動增量的函數,並使[number]成爲調用函數的計算列。 –
創建一個單獨的表,保存每個用戶的數量,如果您的當前表的行數比用戶多得多,則可以更好地保留每個用戶的數字 –