ฉันจะสร้างตารางด้วยคอลัมน์ที่ใช้ลำดับได้อย่างไร


10

ฉันมีดังต่อไปนี้

CREATE TABLE [MyTable]
(
    [ID] [bigint] PRIMARY KEY NOT NULL,
    [Title] [nvarchar](64) NOT NULL
)

CREATE SEQUENCE MyTableID
    START WITH 1
    INCREMENT BY 1
    NO CACHE
    ;
GO

ฉันต้องการแทรกระเบียนใหม่ใน MyTable และตั้งค่า ID เป็นค่าลำดับถัดไป ฉันจะทำมันได้อย่างไร อาจจะเป็นทริกเกอร์หรือมีวิธีอื่นอีกไหม? อย่างไร?

ขณะที่ผมกำลังใช้ SQL Server 2012, ฉันไม่ต้องการที่จะใช้บัตรประจำตัวเนื่องจากมีปัญหาช่องว่าง

คำตอบ:


16

กำหนดเป็นคุณสมบัติเริ่มต้นสำหรับคอลัมน์

CREATE TABLE [MyTable]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title] [nvarchar](64) NOT NULL
);

ผู้อ่านในอนาคตลำดับอาจมีช่องว่างหากบริการหยุดโดยไม่คาดคิดมูลค่าของเอนทิตีใน CACHE อาจสูญหายได้ ที่นี่พวกเขากำลังระบุว่าno cacheจะลดทอนประสิทธิภาพการทำงานช้าลงสำหรับวัตถุลำดับ

สร้างลำดับอ้างอิง


มันปลอดภัยที่จะใช้cacheในกรณีนี้หรือไม่? no cacheในการเชื่อมโยงการเชื่อมต่อไมโครซอฟท์บอกให้เราใช้
BrunoLM

@BrunoLM มันขึ้นอยู่กับว่า db ที่เราพูดถึงมีขนาดเล็ก / ใหญ่และจำนวนธุรกรรมต่อวินาที / นาทีที่เรากำลังพูดถึง
Techie Joe

2

หากต้องการใช้ a SEQUENCEในINSERTคำสั่งคุณสามารถลอง:

INSERT INTO [MyTable] ([ID],[TITLE]) VALUES (NEXT VALUE FOR dbo.MyTableID, @TITLE) 

NEXT VALUE FOR dbo.MyTableIDSEQUENCEไวยากรณ์สำหรับการได้รับหมายเลขถัดจาก


0

คุณสามารถใช้หนึ่งลำดับสำหรับหลายตารางดังแสดงในตัวอย่างต่อไปนี้:

CREATE SEQUENCE dbo.MyTableID
    START WITH 1
    INCREMENT BY 1
    NO CACHE
    ;
GO

CREATE TABLE dbo.[MyTable1]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title1] [nvarchar](64) NOT NULL
);

CREATE TABLE dbo.[MyTable2]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title2] [nvarchar](64) NOT NULL
);

--Insert 2 rows
insert into  [MyTable1] (title1)
select 'title11'

insert into  [MyTable1] (title1)
select 'title12';

insert into  [MyTable2] (title2)
select 'title21'

insert into  [MyTable2] (title2)
select 'title22';

select f1.*, 'Into MyTable1' Tb from  [MyTable1] f1
union all
select f1.*, 'Into MyTable2' Tb from  [MyTable2] f1

เอาท์พุท:

+----+---------+---------------+
| ID | Title1  |      Tb       |
+----+---------+---------------+
|  1 | title11 | Into MyTable1 |
|  2 | title12 | Into MyTable1 |
|  3 | title21 | Into MyTable2 |
|  4 | title22 | Into MyTable2 |
+----+---------+---------------+

sqlfiddle

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