2012-02-15 37 views
58

我的問題遞增的整數列值是如何通過1 SQL

如何由1

遞增列的值。例如,假設一列ID具有值1,2, 3,4,...

現在,當我更新此表,則ID列以1遞增,

現在ID將變成2,3,4,5,..

+0

有關任何你想要的樣本?將1列的列值增加1?所有的行?哪個是你的表格(DDL)?數據樣本(DML)? – Kiquenet 2016-08-19 09:18:26

回答

0

您可以使用IDENTITY這將爲您做到這一點。

CREATE TABLE [dbo].[MyTable](
    [MyTableID] [int] IDENTITY(1,1) NOT NULL, 
    -- Other columns 
) 

當您插入第一個記錄,你會得到一個Id 1.

97

要添加一個到表中的每個值...

UPDATE myTable 
SET ID = ID + 1 

要創建一個新的價值,多一個然後以前的最高(通常),使用column with IDENTITY

+20

請注意,當列爲NULL時,這不會工作。即使在增加之後,NULL列仍然爲NULL。爲了解決這個問題,請使用['ISNULL'語句](http://msdn.microsoft.com/en-us/library/ms184325.aspx):'UPDATE myTable SET ID = ISNULL(ID,0)+ 1'(取自[This SO answer](http://stackoverflow.com/a/9136574/107625)) – 2014-06-09 08:09:48

+0

'SET [Lic] = [Lic] + @ dif'。注意*** @ dif ***變量可以是_positive,0或negative_ – Kiquenet 2016-08-19 09:17:01

31

如果你想有一個自動生成的每一行的唯一編號,這是IDENTITY根據尼爾的答案。

如果每次更新表的時間要增加值(即它們不是鍵):

Update MyTable 
Set IDColumn = IDColumn + 1 
Where <whatever> 
0

你可以嘗試以下方法:

DECLARE @i INT 
SET @i = @@ROWCOUNT + 1 

INSERT INTO YourTable 
     (Identity Column)  
VALUES  
     (@i + 1) 
1

在Oracle代碼有點棘手。

您將不得不用序列對象創建一個自動遞增字段(該對象生成一個數字序列)。

使用以下CREATE SEQUENCE語法:

CREATE SEQUENCE seq_person 
MINVALUE 1 
START WITH 1 
INCREMENT BY 1 
CACHE 10 

以上代碼創建稱爲seq_person序列對象,即以1開始,將被遞增1。它也將緩存多達10個值的性能。緩存選項指定將多少個序列值存儲在內存中以便更快地訪問。

要插入一個新的記錄在「Persons」表中,我們將不得不使用NEXTVAL函數(此函數從seq_person序列中的下一個值):

INSERT INTO Persons (ID,FirstName,LastName) 
VALUES (seq_person.nextval,'Lars','Monsen') 

上面的SQL語句會插入一個進入「人員」表的新記錄。 「ID」列將被分配seq_person序列中的下一個數字。 「FirstName」列將被設置爲「Lars」,並且「LastName」列將被設置爲「Monsen」。

2

試試這個:

Update Emp set testCount= ISNULL(testCount, 0) + 1 where testId=1