cách tăng giá trị cột số nguyên lên 1 trong SQL


92

Câu hỏi của tôi là

cách tăng giá trị của cột lên 1.

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

Bây giờ khi tôi cập nhật bảng này thì IDcột sẽ tăng lên 1,

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


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

Câu trả lời:


155

Để thêm một vào mọi giá trị trong bảng ...

UPDATE myTable
SET ID = ID + 1

Để tạo một giá trị mới, một giá trị khác sau đó là giá trị cao nhất trước đó (thường), hãy sử dụng cột có IDENTITY


39
Xin lưu ý rằng điều này không hoạt động khi cột NULL. NULL cột vẫn NULL, ngay cả sau khi tăng dần. Đối với điều này để giải quyết, sử dụng các ISNULLtuyên bố như thế này: UPDATE myTable SET ID = ISNULL(ID, 0) + 1(Trích từ câu trả lời SO này )
Uwe Keim

SET [Lic] = [Lic] + @dif. Lưu ý @dif biến có thể được tích cực, 0, hoặc tiêu cực
Kiquenet

43

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

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

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


1

Bạn có thể sử dụng IDENTITYmà sẽ làm điều 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 của mình, bạn sẽ nhận được Id1.


1

Trong Oracle, mã phức tạp hơn một chút.

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

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

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

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

Để chèn một bản ghi mới vào bảng "Người", chúng ta sẽ phải sử dụng hàm tiếp theo (hàm 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â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".


1

Bạn có thể thử những cách sau:

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

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.