1. 程式人生 > >如何獲取sqlserver 序列下一個值(本文在網絡上找的)

如何獲取sqlserver 序列下一個值(本文在網絡上找的)

art 直接 for esc seq io操作 rom upload 最小值

使用SQL創建序列對象:

IF EXISTS(SELECT * FROM sys.sequences WHERE name = N‘TestSeq‘)

DROP SEQUENCE TestSeq;

GO

--創建序列對象

CREATE SEQUENCE TestSeq AS tinyint

START WITH 1

INCREMENT BY 1;

GO

--創建表

CREATE TABLE TEST

(ID tinyint, Name varchar(150))

--產生序列號碼並插入表中

INSERT INTO TEST

(ID,Name)

VALUES

(NEXT VALUE FOR TestSeq, ‘allen‘)

INSERT INTO TEST

(ID,Name)

VALUES

(NEXT VALUE FOR TestSeq, ‘kevin‘)

SELECT * FROM TEST

技術分享

--產生序列可以重復使用,下面的例子當序列號碼超過255後又重新從0開始。

CREATE SEQUENCE [dbo].[Test1Seq]

AS [tinyint]

START WITH 0

INCREMENT BY 5

CYCLE

SELECT

NEXT VALUE FOR [Test1Seq]

GO 110

技術分享

--重新將序列初始值變為5

ALTER SEQUENCE dbo.TestSeq

RESTART WITH 5;

SELECT * FROM sys.sequences WHERE name = ‘TestSeq‘

技術分享

--共享序列,兩個表可以使用同一個序列對象(Identity列是不可以的)

CREATE SEQUENCE dbo.Seq AS INT

START WITH 1

INCREMENT BY 1

CREATE TABLE dbo.Examp1

(

Seq INT NOT NULL,

Name VARCHAR(50) NOT NULL

);

CREATE TABLE dbo.Examp2

(

Seq INT NOT NULL,

Name VARCHAR(50)NOTNULL

);

INSERT INTO dbo.Examp1(Seq,Name) VALUES (NEXT VALUE FOR dbo.Seq, ‘Tom‘);

INSERT INTO dbo.Examp2(Seq,Name) VALUES (NEXT VALUE FOR dbo.Seq, ‘Jerry‘);

SELECT * FROM Examp1

SELECT * FROM Examp2

技術分享

--可以直接在查詢中使用序列對象(Identity列是不可以的)

CREATE SEQUENCE SeqOrder AS tinyint

START WITH1

INCREMENT BY1

MINVALUE 1

NO MAXVALUE

CYCLE;

GO

SELECT ID, Name,

NEXT VALUE FOR SeqOrder OVER(ORDER BY Name DESC) As [Order]

FROM test;

技術分享

為了提升性能,還可以使用CACHE選項,這樣就可以將序列號碼緩存到內存,減少IO操作,值得一提的是序列對象可以指定最大值和最小值,增加值可以為負數。

如何獲取sqlserver 序列下一個值(本文在網絡上找的)