SQL Server序列SEQUENCE怎么使用


这篇文章主要介绍了SQLServer序列SEQUENCE怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQLServer序列SEQUENCE怎么使用文章都会有所收获,下面我们一起来看看吧。SQL SERVER2012 之前版本,一般采用GUID或者IDENTITY来作为标示符。在2012中,微软终于增加了 SEQUENCE 对象,功能和性能都有了很大的提高。
序列是一种用户定义的架构绑定对象,它根据创建该序列时采用的规范生成一组数值。 这组数值以定义的间隔按升序或降序生成,并且可根据要求循环(重复)。序列不与表相关联,这一点与标识列不同。应用程序将引用某一序列对象以便接收其下一个值。序列是通过使用CREATE SEQUENCE语句独立于表来创建的。 其选项使您可以控制增量、最大值和最小值、起始点、自动重新开始功能和缓存以便改进性能。与在插入行时生成的标识列值不同,应用程序可以通过调用NEXT VALUE FOR函数在插入行之前获取下一序列号。 在调用 NEXT VALUE FOR 时分配该序列号,即使在该序列号永远也不插入某个表中时也是如此。 此 NEXT VALUE FOR 函数可用作表定义中某个列的默认值。使用sp_sequence_get_range可一次获取某个范围的多个序列号。序列可定义为任何整数数据类型。 如tinyint, smallint, int, bigint, decimal 或是小数精度为0的数值类型。如果未指定数据类型,则序列将默认为bigint。序列的限制(limitation)有二个序列不支持事务,即使事务中进行了回滚(rollback)操作,序列仍然返回下一个元素。序列不支持SQL Server 复制(replication),序列不会复制到订阅的SQL Server实例中。如果一个表的默认值依赖一个序列,而序列又是不可复制的,这会导致订阅的SQL Server出现脚本错误。在以下情况下将使用序列,而非标识列:应用程序要求在插入到表中之前有一个数值。应用程序要求在多个表之间或者某个表内的多个列之间共享单个数值系列。在达到指定的数值时,应用程序必须重新开始该数值系列。 例如,在分配值 1 到 1免费云主机域名0 后,应用程序再次开始分配值 1 到 10。应用程序要求序列值按其他字段排序。 NEXT VALUE FOR 函数可以将 OVER 子句应用于该函数调用。 OVER 子句确保返回的值按照 OVER 子句的 ORDER BY 子句的顺序生成。应用程序要求同时分配多个数值。 例如,应用程序需要保留五个序号。 如果正在同时向其他进程发出数值,则请求标识值可能会导致在系列中出现间断。 调用 sp_sequence_get_range 可以一次检索该序列中的若干数值。您需要更改序列的规范,例如增量值。我们可以在SSMS中创建也可以使用SQL SERVER脚本创建序列对象:1、使用默认值创建序列:若要创建从 -2,147,483,648 到 2,147,483,647 且增量为 1 的整数序列号。2、若要创建类似于从 1 到 2,147,483,647 且增量为 1 的标识列的整数序列号,请使用以下语句。3、使用所有参数创建序列以下示例使用 decimal 数据类型(范围为 0 到 255)创建一个名为 DecSeq 的序列 。 序列以 125 开始,每次生成数字时递增 25。 因为该序列配置为可循环,所以,当值超过最大值 200 时,序列将从最小值 100 重新开始。执行以下语句可查看第一个值;START WITH选项为 125。将该语句再执行三次,以返回 150、175 和 200。再次执行该语句,以查看起始值如何循环回到MINVALUE选项值 100。下面的示例创建一个名为 Test 的架构、一个名为 Orders 的表以及一个名为 CountBy1 的序列,然后使用 NEXT VALUE FOR 函数将行插入到该表中。下面是结果集:OrderID Name Qty1 Tire 22 Seat 13 Brake 1从序列对象中返回一系列序列值。 序列对象生成和发出请求的值数目,并为应用程序提供与该系列序列值相关的元数据。以下语句从 RangeSeq 序列对象中获取四个序列号,并向用户返回过程中的所有输出值。下面的示例创建一个包含该示例的三行的架构和表。 然后,该示例添加一个新列并且删除旧列。使用 Transact-SQL 的SELECT *语句将这个新列作为最后一列接收,而非作为第一列接收。 如果这样做是不可接受的,则您必须创建全新的表,将数据移到该表中,然后针对这个新表重新创建权限。重新开始Samples.IDLabel序列。在生成编号后,序列对象与其生成的编号之间没有延续关系,因此可以删除序列对象,即使生成的编号仍在使用。当序列对象由存储过程或触发器引用时,可以删除序列对象,因为序列对象未绑定到架构上。 如果序列对象是作为表中的默认值引用的,则无法删除序列对象。 错误消息将列出引用序列的对象。以下示例从当前数据库中删除一个名为CountBy1的序列对象。有关序列的信息,请查询sys.sequences。执行以下代码,以确认缓存大小并查看当前值。关于“SQLServer序列SEQUENCE怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“SQLServer序列SEQUENCE怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: Java设计模式之单例和原型实例分析

今天小编给大家分享一下Java设计模式之单例和原型实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。今天老王又来了,还是想买我们的产品,今天…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/08 20:05
下一篇 05/08 20:06

相关推荐