วิธีการเพิ่มค่าคอลัมน์จำนวนเต็มด้วย 1 ใน SQL


92

คำถามของฉันคือ

วิธีการเพิ่มค่าของคอลัมน์ด้วย 1

ตัวอย่างเช่นสมมติว่าคอลัมน์IDมีค่า 1,2,3,4, ..

ตอนนี้เมื่อฉันอัปเดตตารางนี้IDคอลัมน์ควรเพิ่มขึ้นทีละ 1

ตอนนี้IDจะกลายเป็น 2,3,4,5, ..


ตัวอย่างใด ๆ ที่คุณต้องการ? ค่าของคอลัมน์ที่เพิ่มขึ้นทีละ 1 สำหรับ 1 แถว? ทุกแถว? โต๊ะของคุณ (DDL) คืออะไร? ตัวอย่างข้อมูล (DML)?
Kiquenet

คำตอบ:


155

หากต้องการเพิ่มหนึ่งในทุกค่าในตาราง ...

UPDATE myTable
SET ID = ID + 1

ในการสร้างค่าใหม่อีกหนึ่งค่าจากค่าสูงสุดก่อนหน้า (โดยปกติ) ให้ใช้คอลัมน์ที่มี IDENTITY


39
โปรดทราบว่าสิ่งนี้ใช้ไม่ได้เมื่อคอลัมน์เป็น NULL คอลัมน์ NULL ยังคงเป็นโมฆะแม้ว่าจะเพิ่มขึ้นแล้วก็ตาม สำหรับสิ่งนี้ในการแก้ปัญหาให้ใช้ISNULLคำสั่งดังนี้: UPDATE myTable SET ID = ISNULL(ID, 0) + 1(นำมาจากคำตอบ SO นี้ )
Uwe Keim

SET [Lic] = [Lic] + @dif. ตัวแปรหมายเหตุ@difสามารถเป็นบวก 0 หรือลบ
Kiquenet

43

หากคุณต้องการให้มีหมายเลขเฉพาะสำหรับแต่ละแถวที่สร้างขึ้นโดยอัตโนมัตินี่คือ IDENTITY ตามคำตอบของนีล

หากคุณอัปเดตตารางแต่ละครั้งที่คุณต้องการเพิ่มค่า (กล่าวคือไม่ใช่คีย์):

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


1

คุณสามารถใช้IDENTITYซึ่งจะทำเพื่อคุณ

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

เมื่อคุณแทรกระเบียนแรกคุณจะได้รับId1


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 ด้านบนจะแทรกระเบียนใหม่ลงในตาราง "Persons" คอลัมน์ "ID" จะถูกกำหนดหมายเลขถัดไปจากลำดับ seq_person คอลัมน์ "FirstName" จะถูกตั้งค่าเป็น "Lars" และคอลัมน์ "LastName" จะถูกตั้งค่าเป็น "Monsen"


1

คุณสามารถลองทำสิ่งต่อไปนี้:

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

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.