Sekans kullanan bir sütunu olan bir tabloyu nasıl oluştururum?


10

Aşağıdakilere sahibim

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'a yeni kayıtlar eklemek ve kimliği sıralamanın bir sonraki değerine ayarlamak istiyorum. Nasıl yapabilirim? Bir tetikleyici belki, yoksa başka bir yol var mı? Nasıl?

SQL Server 2012 kullandığım için boşluk hatası nedeniyle Kimlik kullanmak istemiyorum .

Yanıtlar:


16

Sütun için varsayılan özellik olarak atayın

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

Gelecek okuyucular, bir Dizi olabilir hizmeti beklenmedik, ÖNBELLEK içinde varlıkların değeri kaybolabilir durursa bir boşluk var. Burada, no cachebunu dizi nesnesi için daha yavaş performans dengesiyle hafifletmeyi belirtiyorlar.

SEQUENCE referansı oluştur


cacheBu durumda kullanmak güvenli midir? Bağlantı bağlantısında Microsoft bize kullanmamızı söyler no cache.
BrunoLM

@BrunoLM Bir db'nin ne kadar büyük / küçük olduğuna ve saniyede / dakika başına kaç işlemden bahsettiğimize bağlıdır.
Techie Joe

2

SEQUENCEBir INSERTifadede a kullanmak için şunu deneyebilirsiniz:

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

NEXT VALUE FOR dbo.MyTableIDa'dan sonraki sayıyı elde etmek için sözdizimidir SEQUENCE.


0

Aşağıdaki örnekte gösterildiği gibi, birden çok tablo için bir sıra kullanabilirsiniz:

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

Çıktı:

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

sqlfiddle

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.