成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

SQL Server序列SEQUENCE用法介紹

瀏覽:173日期:2023-03-06 14:25:20
目錄
  • 一、概述
    • 選擇使用序列的情況:
  • 二、創建序列:CREATE SEQUENCE
    • 二、使用序列號:NEXT VALUE FOR
      • 1、序列值插入到表中
      • 2、在select 語句中使用 NEXT VALUE FOR 。
      • 3、通過使用 OVER 子句為結果集生成序列號
      • 4、sp_sequence_get_range:同時獲取多個序列號
      • 5、將表從標識更改為序列
    • 三、管理序列
      • 1、更新(重置)序列:ALTER SEQUENCE
      • 2、DROP SEQUENCE:刪除序列
      • 3、查看序列信息

    一、概述

    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 ;

    2、若要創建類似于從 1 到 2,147,483,647 且增量為 1 的標識列的整數序列號,請使用以下語句。

    CREATE SEQUENCE Schema.SequenceName      AS int      START WITH 1      INCREMENT BY 1 ;

    3、使用所有參數創建序列

    以下示例使用 decimal 數據類型(范圍為 0 到 255)創建一個名為 DecSeq 的序列 。 序列以 125 開始,每次生成數字時遞增 25。 因為該序列配置為可循環,所以,當值超過最大值 200 時,序列將從最小值 100 重新開始。

    CREATE SEQUENCE Test.DecSeq      AS decimal(3,0)       START WITH 125      INCREMENT BY 25      MINVALUE 100      MAXVALUE 200      CYCLE      CACHE 3  ;

    二、使用序列號:NEXT VALUE FOR

    執行以下語句可查看第一個值;START WITH 選項為 125。將該語句再執行三次,以返回 150、175 和 200。再次執行該語句,以查看起始值如何循環回到 MINVALUE選項值 100。

    SELECT NEXT VALUE FOR Test.DecSeq;

    1、序列值插入到表中

    下面的示例創建一個名為 Test 的架構、一個名為 Orders 的表以及一個名為 CountBy1 的序列,然后使用 NEXT VALUE FOR 函數將行插入到該表中。

    --Create the Test schema  CREATE SCHEMA Test ;  GO    -- Create a table  CREATE TABLE Test.Orders      (OrderID int PRIMARY KEY,      Name varchar(20) NOT NULL,      Qty int NOT NULL);  GO    -- Create a sequence  CREATE SEQUENCE Test.CountBy1      START WITH 1      INCREMENT BY 1 ;  GO    -- Insert three records  INSERT Test.Orders (OrderID, Name, Qty)      VALUES (NEXT VALUE FOR Test.CountBy1, "Tire", 2) ;  INSERT test.Orders (OrderID, Name, Qty)      VALUES (NEXT VALUE FOR Test.CountBy1, "Seat", 1) ;  INSERT test.Orders (OrderID, Name, Qty)      VALUES (NEXT VALUE FOR Test.CountBy1, "Brake", 1) ;  GO    -- View the table  SELECT * FROM Test.Orders ;  GO

    下面是結果集:

    OrderID Name Qty

    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的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持。

    標簽: MsSQL
    相關文章:
    成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
    综合欧美一区二区三区| 一本色道久久综合亚洲精品不 | 色网站国产精品| 亚洲精品成人悠悠色影视| 欧美三级午夜理伦三级中文幕| 26uuu欧美| 不卡的电影网站| 久久综合九色综合欧美就去吻| 不卡一区二区在线| 精品精品欲导航| av网站一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 成人av在线影院| 欧美sm极限捆绑bd| 99久久国产综合精品色伊| 久久久久久久久久久久电影| 91视频www| 亚洲欧美综合网| 国产一区二区三区奇米久涩| 午夜视频在线观看一区二区三区 | 欧美电视剧免费观看| 成人性生交大片| 久久久久久久综合| 国内精品久久久久久久影视蜜臀| 综合色中文字幕| 亚洲一区精彩视频| 性做久久久久久久久| 色久综合一二码| 国产一区二三区| 久久色中文字幕| 亚洲激情一区| 亚洲国产成人精品视频| 91黄视频在线观看| 国产剧情一区二区| 久久日韩粉嫩一区二区三区| 国内精品嫩模av私拍在线观看| 亚洲人成网站影音先锋播放| 久久成人精品| 久久精品久久精品| 精品av久久707| 红桃视频国产精品| 亚洲国产精品久久不卡毛片| 欧美亚洲一区二区在线观看| 懂色av一区二区三区免费观看 | 欧美性受xxxx黑人xyx性爽| 国产麻豆精品在线| 国产欧美日韩精品一区| 国产三级精品在线不卡| 男男gaygay亚洲| 日韩无一区二区| 红桃视频亚洲| 亚洲6080在线| 欧美一区二区三区性视频| 91免费观看视频| 一区二区三区欧美日韩| 欧洲一区二区三区在线| 成人av资源站| 亚洲欧美国产三级| 欧美体内she精视频| 成人av高清在线| 一区二区三区在线影院| 欧美吻胸吃奶大尺度电影| 91视视频在线直接观看在线看网页在线看| 亚洲男帅同性gay1069| 欧美性高清videossexo| 91视频精品在这里| 亚洲成人7777| 精品久久五月天| 国产九九精品| 国产高清精品久久久久| 一区精品在线播放| 欧美群妇大交群中文字幕| 国模一区二区三区| 麻豆高清免费国产一区| 久久精品亚洲乱码伦伦中文| 欧美一级播放| 成人av资源下载| 亚洲成人先锋电影| 精品久久久久香蕉网| 国产一区二区三区成人欧美日韩在线观看 | 伊人一区二区三区| 欧美精品高清视频| 国产一区视频观看| 久久99国内精品| 最新热久久免费视频| 欧美日韩国产小视频| 黄色精品网站| 国产美女娇喘av呻吟久久 | 久久不见久久见免费视频7| 国产精品色呦呦| 欧美人狂配大交3d怪物一区| 激情亚洲成人| 国产成人av电影在线播放| 亚洲码国产岛国毛片在线| 7777精品伊人久久久大香线蕉最新版 | 国产成人啪免费观看软件| 最新热久久免费视频| 在线成人av网站| 国产精品久久久久久模特| 成人高清免费观看| 午夜成人免费视频| 国产精品沙发午睡系列990531| 91麻豆精品国产自产在线观看一区 | 色哟哟日韩精品| 欧美日韩综合另类| 国产麻豆成人精品| 亚洲在线视频免费观看| 欧美精品一区二区三| 欧美性高清videossexo| 亚洲麻豆视频| 99re热这里只有精品视频| 青青草原综合久久大伊人精品 | 日韩精品专区在线影院观看 | 国产亚洲成aⅴ人片在线观看| 欧洲av在线精品| 91久久在线| 9色porny自拍视频一区二区| 久久se精品一区精品二区| 亚洲一区二区三区视频在线播放| 欧美精品一区二区蜜臀亚洲| 欧美三级日韩三级国产三级| 国产亚洲毛片| 国产综合色产| eeuss鲁片一区二区三区 | 韩国女主播成人在线观看| 一区二区三区在线免费播放| 国产色综合一区| 日韩亚洲欧美一区| 色八戒一区二区三区| 国产伦精品一区二区三区视频黑人 | 欧美激情综合五月色丁香| 7777女厕盗摄久久久| 色婷婷av一区二区三区软件| 亚洲二区免费| 91免费在线视频观看| 国产成人综合在线观看| 蜜桃精品在线观看| 亚洲午夜免费电影| 国产精品乱码人人做人人爱| 久久久久青草大香线综合精品| 91精品国产一区二区| 欧美日韩精品一区二区三区蜜桃 | 激情综合亚洲| 午夜精品偷拍| 91天堂素人约啪| 99视频有精品| 成人免费看片app下载| 国产精品小仙女| 国产伦精品一区二区三区视频青涩| 免费成人在线观看| 日韩中文字幕不卡| 亚洲成人动漫在线免费观看| 亚洲卡通欧美制服中文| 国产精品国产成人国产三级| 国产欧美日韩激情| 国产女主播在线一区二区| 久久久噜噜噜久久中文字幕色伊伊 | 国产高清一区日本| 国产精品白丝av| 国产专区综合网| 国产一区二区精品久久91| 狠狠色丁香婷综合久久| 免费成人在线影院| 奇米色一区二区| 麻豆91精品91久久久的内涵| 丝袜美腿高跟呻吟高潮一区| 午夜精品福利在线| 日韩不卡在线观看日韩不卡视频| 三级精品在线观看| 日本特黄久久久高潮| 美国毛片一区二区| 久久成人精品无人区| 韩国精品免费视频| 国产精品1区2区3区| 粉嫩av一区二区三区粉嫩 | 三级久久三级久久| 日韩精品一级二级| 青草国产精品久久久久久| 美脚の诱脚舐め脚责91| 精品中文字幕一区二区| 国产综合一区二区| 国产精品1024| 91网站视频在线观看| 欧美精品日本| 最新日韩av| 男人的天堂亚洲在线| 日本韩国精品一区二区在线观看| 在线观看亚洲精品| 91精品国产手机| 久久这里只有精品首页| 欧美激情在线一区二区三区| 亚洲欧美一区二区在线观看| 亚洲国产一区视频| 日韩国产精品久久久久久亚洲| 久久国产尿小便嘘嘘| 懂色av中文字幕一区二区三区| 欧美一区激情| 亚洲精品乱码久久久久久蜜桃91| 亚洲一区在线免费| 欧美伊人久久久久久久久影院 |