Làm cách nào để tạo bảng có cột sử dụng chuỗi?


10

Tôi có những điều sau đây

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

Tôi muốn chèn các bản ghi mới trên MyTable và đặt ID thành giá trị tiếp theo của chuỗi. Tôi làm nó như thế nào? Một kích hoạt có lẽ, hoặc có một số cách khác? Làm sao?

Khi tôi đang sử dụng SQL Server 2012, tôi không muốn sử dụng Danh tính vì lỗi khoảng cách .

Câu trả lời:


16

Chỉ định nó là thuộc tính mặc định cho cột

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

Các độc giả tương lai, một Chuỗi có thể có một khoảng cách nếu dịch vụ dừng đột ngột, giá trị của các thực thể trong CACHE có thể bị mất. Ở đây, họ đang chỉ định no cacheđể giảm thiểu điều đó bằng sự đánh đổi hiệu năng chậm hơn cho đối tượng chuỗi.

TẠO tài liệu tham khảo


Có an toàn để sử dụng cachetrong trường hợp này? Tại liên kết kết nối Microsoft bảo chúng tôi sử dụng no cache.
BrunoLM

@BrunoLM Nó phụ thuộc vào mức độ lớn / nhỏ của một db mà chúng ta đang nói đến và số lượng giao dịch mỗi giây / phút mà chúng ta đang nói đến.
Techie Joe

2

Để sử dụng SEQUENCEtrong một INSERTtuyên bố, bạn có thể thử này:

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

NEXT VALUE FOR dbo.MyTableIDlà cú pháp để lấy số tiếp theo từ a SEQUENCE.


0

Bạn có thể sử dụng một chuỗi cho nhiều bảng, như được minh họa bằng ví dụ sau:

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

Đầu ra:

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

sqlfiddle

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.