2012-02-15 40 views
58

Câu hỏi của tôi làlàm thế nào để tăng số nguyên Cột giá trị bằng 1 trong SQL

làm thế nào để tăng giá trị của một cột bằng cách 1.

Ví dụ, giả sử một cột ID có giá trị 1,2, 3,4, ..

Bây giờ khi tôi cập nhật bảng này sau đó ID cột nên tăng 1,

Bây giờ ID sẽ trở thành 2,3,4,5, ..

+0

bất kỳ mẫu về bạn muốn? giá trị của cột tăng thêm 1 cho 1 hàng? tất cả các hàng? đó là bảng của bạn (DDL)? mẫu dữ liệu (DML)? – Kiquenet

Trả lời

0

Bạn có thể sử dụng IDENTITY sẽ thực hiện việc này cho bạn.

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

Khi bạn chèn bản ghi đầu tiên, bạn sẽ nhận được một Id của 1.

97

Để thêm một đến mỗi giá trị trong bảng ...

UPDATE myTable 
SET ID = ID + 1 

Để tạo mới giá trị, cao hơn một lần so với giá trị cao nhất trước đó (thường), sử dụng column with IDENTITY

+20

Xin lưu ý rằng điều này không _not_ làm việc khi cột là NULL. Các cột NULL giữ nguyên NULL, ngay cả sau khi gia tăng. Để giải quyết vấn đề này, sử dụng câu lệnh ['ISNULL'] (http://msdn.microsoft.com/en-us/library/ms184325.aspx) như sau:' UPDATE myTable SET ID = ISNULL (ID, 0) + 1' (Lấy từ [câu trả lời SO này] (http://stackoverflow.com/a/9136574/107625)) –

+0

'SET [Lic] = [Lic] + @ dif'. Lưu ý *** @ dif *** biến có thể là _positive, 0 hoặc negative_ – Kiquenet

31

Nếu bạn muốn có một số duy nhất cho mỗi hàng được tạo tự động, đây là IDENTITY theo câu trả lời của Neil .

Nếu mỗi lần bạn cập nhật bảng bạn muốn tăng giá trị (tức là họ không khóa):

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

Bạn có thể thử như sau:

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

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

Trong Oracle mã là một chút khéo léo hơn.

Bạn sẽ phải tạo trường tự động tăng với đối tượng chuỗi (đối tượng này tạo chuỗi số).

Sử dụng như sau CREATE SEQUENCE cú pháp:

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

Đoạn mã trên tạo ra một đối tượng chuỗi gọi seq_person, mà bắt đầu với 1 và sẽ tăng lên 1. Nó cũng sẽ cache lên đến 10 giá trị cho hiệu suất. Tùy chọn bộ nhớ cache xác định số lượng giá trị chuỗi sẽ được lưu trữ trong bộ nhớ để truy cập nhanh hơn.

Để chèn một kỷ lục mới vào "Người" bảng, chúng ta sẽ phải sử dụng chức năng NEXTVAL (chức năng này lấy giá trị tiếp theo từ chuỗi seq_person):

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

Các câu lệnh SQL trên sẽ chèn một bản ghi mới vào bảng "Người". Cột "ID" sẽ được gán số tiếp theo từ chuỗi seq_person. Cột "FirstName" sẽ được đặt thành "Lars" và cột "LastName" sẽ được đặt thành "Monsen".

2

Hãy thử điều này:

Update Emp set testCount= ISNULL(testCount, 0) + 1 where testId=1 
Các vấn đề liên quan