คำถามของฉันคือ
วิธีการเพิ่มค่าของคอลัมน์ด้วย 1
ตัวอย่างเช่นสมมติว่าคอลัมน์ID
มีค่า 1,2,3,4, ..
ตอนนี้เมื่อฉันอัปเดตตารางนี้ID
คอลัมน์ควรเพิ่มขึ้นทีละ 1
ตอนนี้ID
จะกลายเป็น 2,3,4,5, ..
คำถามของฉันคือ
วิธีการเพิ่มค่าของคอลัมน์ด้วย 1
ตัวอย่างเช่นสมมติว่าคอลัมน์ID
มีค่า 1,2,3,4, ..
ตอนนี้เมื่อฉันอัปเดตตารางนี้ID
คอลัมน์ควรเพิ่มขึ้นทีละ 1
ตอนนี้ID
จะกลายเป็น 2,3,4,5, ..
คำตอบ:
หากต้องการเพิ่มหนึ่งในทุกค่าในตาราง ...
UPDATE myTable
SET ID = ID + 1
ในการสร้างค่าใหม่อีกหนึ่งค่าจากค่าสูงสุดก่อนหน้า (โดยปกติ) ให้ใช้คอลัมน์ที่มี IDENTITY
ISNULL
คำสั่งดังนี้: UPDATE myTable SET ID = ISNULL(ID, 0) + 1
(นำมาจากคำตอบ SO นี้ )
SET [Lic] = [Lic] + @dif
. ตัวแปรหมายเหตุ@difสามารถเป็นบวก 0 หรือลบ
หากคุณต้องการให้มีหมายเลขเฉพาะสำหรับแต่ละแถวที่สร้างขึ้นโดยอัตโนมัตินี่คือ IDENTITY ตามคำตอบของนีล
หากคุณอัปเดตตารางแต่ละครั้งที่คุณต้องการเพิ่มค่า (กล่าวคือไม่ใช่คีย์):
Update MyTable
Set IDColumn = IDColumn + 1
Where <whatever>
ลองสิ่งนี้:
Update Emp set testCount = ISNULL(testCount, 0) + 1 where testId=1
คุณสามารถใช้IDENTITY
ซึ่งจะทำเพื่อคุณ
CREATE TABLE [dbo].[MyTable](
[MyTableID] [int] IDENTITY(1,1) NOT NULL,
-- Other columns
)
เมื่อคุณแทรกระเบียนแรกคุณจะได้รับId
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"
คุณสามารถลองทำสิ่งต่อไปนี้:
DECLARE @i INT
SET @i = @@ROWCOUNT + 1
INSERT INTO YourTable
(Identity Column)
VALUES
(@i + 1)