SQL?Server序列SEQUENCE用法介紹
時間:2024-03-11 15:08作者:下載吧人氣:20
一、概述
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 到 10 后,應用程序再次開始分配值 1 到 10。
- 應用程序要求序列值按其他字段排序。 NEXT VALUE FOR 函數可以將 OVER 子句應用于該函數調用。 OVER 子句確保返回的值按照 OVER 子句的 ORDER BY 子句的順序生成。
- 應用程序要求同時分配多個數值。 例如,應用程序需要保留五個序號。 如果正在同時向其他進程發出數值,則請求標識值可能會導致在系列中出現間斷。 調用 sp_sequence_get_range 可以一次檢索該序列中的若干數值。
- 您需要更改序列的規范,例如增量值。
二、創建序列:CREATE SEQUENCE
我們可以在SSMS中創建也可以使用SQL SERVER腳本創建序列對象:


1、使用默認值創建序列:若要創建從 -2,147,483,648 到 2,147,483,647 且增量為 1 的整數序列號。
CREATE SEQUENCE Schema.SequenceName
AS int
INCREMENT BY 1 ;
標簽MSSQL,SQLServer,技術文檔,數據庫,SQLSERVER
網友評論