SQLServer序列SEQUENCE用法介绍


当前第2页 返回上一页

1 Tire 2

2 Seat 1

3 Brake 1

2、在select 语句中使用 NEXT VALUE FOR 。

SELECT NEXT VALUE FOR CountBy5 AS SurveyGroup, Name FROM sys.objects ;

3、通过使用 OVER 子句为结果集生成序列号

SELECT NEXT VALUE FOR Samples.IDLabel OVER (ORDER BY Name) AS NutID, ProductID, Name, ProductNumber FROM Production.Product  
WHERE Name LIKE '%nut%' ;

4、sp_sequence_get_range:同时获取多个序列号

从序列对象中返回一系列序列值。 序列对象生成和发出请求的值数目,并为应用程序提供与该系列序列值相关的元数据。

以下语句从 RangeSeq 序列对象中获取四个序列号,并向用户返回过程中的所有输出值。

DECLARE @range_first_value_output sql_variant ;  
  
EXEC sys.sp_sequence_get_range  
@sequence_name = N'Test.RangeSeq'  
, @range_size = 4  
, @range_first_value = @range_first_value_output OUTPUT ;  
  
SELECT @range_first_value_output AS FirstNumber ;

5、将表从标识更改为序列

下面的示例创建一个包含该示例的三行的架构和表。 然后,该示例添加一个新列并且删除旧列。

使用 Transact-SQL 的 SELECT * 语句将这个新列作为最后一列接收,而非作为第一列接收。 如果这样做是不可接受的,则您必须创建全新的表,将数据移到该表中,然后针对这个新表重新创建权限。

-- 添加没有IDENTITY属性的新列
ALTER TABLE Test.Department   
    ADD DepartmentIDNew smallint NULL  
GO  
  
-- 将值从旧列复制到新列  
UPDATE Test.Department  
    SET DepartmentIDNew = DepartmentID ;  
GO  
  
-- 删除旧列上的主键约束  
ALTER TABLE Test.Department  
    DROP CONSTRAINT [PK_Department_DepartmentID];  
-- 删除旧列  
ALTER TABLE Test.Department  
    DROP COLUMN DepartmentID ;  
GO  
  
-- 将新列重命名为旧列名  
EXEC sp_rename 'Test.Department.DepartmentIDNew',   
    'DepartmentID', 'COLUMN';  
GO  
  
-- 将新列更改为NOT NULL  
ALTER TABLE Test.Department  
    ALTER COLUMN DepartmentID smallint NOT NULL ;  
-- 添加唯一的主键约束  
ALTER TABLE Test.Department  
    ADD CONSTRAINT PK_Department_DepartmentID PRIMARY KEY CLUSTERED   
         (DepartmentID ASC) ;  
-- 从DepartmentID列中获取当前的最高值,并创建一个用于列的序列。(返回3。) 
SELECT MAX(DepartmentID) FROM Test.Department ;  
--使用下一个期望值(4)作为START WITH VALUE;  
CREATE SEQUENCE Test.DeptSeq  
    AS smallint  
    START WITH 4  
    INCREMENT BY 1 ;  
GO  
  
-- 为DepartmentID列添加一个默认值  
ALTER TABLE Test.Department  
    ADD CONSTRAINT DefSequence DEFAULT (NEXT VALUE FOR Test.DeptSeq)   FOR DepartmentID;  
GO  
  
-- 查看结果  
SELECT DepartmentID, Name, GroupName  FROM Test.Department ;   
-- Test insert  
INSERT Test.Department (Name, GroupName)  VALUES ('Audit', 'Quality Assurance') ;  
GO  
  
-- 查看结果  
SELECT DepartmentID, Name, GroupName  FROM Test.Department ;  
GO

三、管理序列

1、更新(重置)序列:ALTER SEQUENCE

重新开始 Samples.IDLabel 序列。

ALTER SEQUENCE Samples.IDLabel  RESTART WITH 1 ;

2、DROP SEQUENCE:删除序列

在生成编号后,序列对象与其生成的编号之间没有延续关系,因此可以删除序列对象,即使生成的编号仍在使用。

当序列对象由存储过程或触发器引用时,可以删除序列对象,因为序列对象未绑定到架构上。 如果序列对象是作为表中的默认值引用的,则无法删除序列对象。 错误消息将列出引用序列的对象。

以下示例从当前数据库中删除一个名为 CountBy1 的序列对象。

DROP SEQUENCE CountBy1 ;

3、查看序列信息

有关序列的信息,请查询 sys.sequences。

执行以下代码,以确认缓存大小并查看当前值。

SELECT cache_size, current_value   FROM sys.sequences  WHERE name = 'DecSeq' ;

到此这篇关于SQL Server序列SEQUENCE的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。

更多SQL内容来自木庄网络博客


打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...