シーケンスを使用する列を持つテーブルを作成するにはどうすればよいですか?


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 を使用しているため、ギャップバグのため、Identityを使用したくありません

回答:


16

列のデフォルトプロパティとして割り当てます。

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

将来のリーダーは、シーケンスはできるサービスが予期せず停止した場合、キャッシュ内のエンティティの値が失われる可能性が、ギャップを持っています。ここでno cacheは、シーケンスオブジェクトのパフォーマンスが遅くなるというトレードオフで、それを軽減するように指定しています。

CREATE SEQUENCEリファレンス


cacheこの場合に使用しても安全ですか?接続リンクで、Microsoftはを使用するように指示していますno cache
BrunoLM 2013年

@BrunoLMそれは、私たちが話しているデータベースの大きさ/小ささと、話している1秒あたりのトランザクション数/分によって異なります。
Techie Joe 2013

2

ステートメントでaを使用するにSEQUENCEは、INSERTこれを試すことができます:

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

NEXT VALUE FOR dbo.MyTableIDから次の数値を取得するための構文ですSEQUENCE


0

次の例に示すように、1つのシーケンスを複数のテーブルに使用できます。

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.