TSQL–标示列、GUID 、序列

TSQL–标示列、GUID 、序列

–1. IDENTIY 列不能为空,不能设默认值,创建后不能使用ALTER TABLE TableName ALTER COLUMN修改,每张表只能有一个自增列
–2. 查看当前值:SELECT IDENT_CURRENT(‘TableName’),
—    查看增量值:SELECT IDENT_INCR(‘TableName’)
—    查看原始种子值:SELECT IDENT_SEED(‘TableName’),起始值, TRUNCATE TABLE 后的初始值。
–3.  允许 显式 插入自增列:SET IDENTITY_INSERT TableName ON; 设置为ON后,允许当前回话对自增列插入时指定值,该设置只影响当前回话,并且同一回话中只允许同时修改一张表的IDENTITY_INSERT 属性,对其他表再次设置时会提示:”表 ‘XXX1’ 的 IDENTITY_INSERT 已经为 ON。无法对表 ‘XXX2’ 执行 SET 操作。“,在对自增列显式插入值后,会检查或修改自增列的当前值为整表中最大值。
–4.  IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。 SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。@@IDENTITY能获取到由当前语句引发的触发器,内置存储过程等倒置的自增值。
–如对表T1插入引发触发器对表T2也进行插入,@@IDENTITY得到T2的自增值,而SCOPE_IDENTITY获取当前作用域T1的自增值。

–4. 如果要求值在所有表中唯一,可以使用UNIQUEIDENTIFIER,使用NEWID()来获得唯一值。
–5. 为避免GUID作为聚簇索引照成的页面碎片和页拆分,可以使用NEWSEQUENTIALID()来获取自增的GUID:
—   CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID())
—  如果考虑安全性和保密性,建议不适用NEWSEQUENTIALID()
–6. NEWSEQUENTIALID()只能针对表使用DEFAULT方式来实现。使用 NEWSEQUENTIALID() 生成的每个 GUID 在该计算机上都是唯一的。仅当源计算机具有网卡时,使用 NEWSEQUENTIALID() 生成的 
–GUID 在多台计算机上才是唯一的
–7.  序列,2012新特性,数据库级别对象,每次获取后自增。
–=============================================
–创建序列
CREATE SEQUENCE [schema_name . ] sequence_name
    [ AS [ built_in_integer_type | user-defined_integer_type ] ]
    [ START WITH <constant> ]
    [ INCREMENT BY <constant> ]
    [ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]
    [ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]
    [ CYCLE | { NO CYCLE } ]
    [ { CACHE [ <constant> ] } | { NO CACHE } ]
    [ ; ]
–=============================================
–获取序列
 NEXT VALUE FOR [ database_name . ] [ schema_name . ]  sequence_name
   [ OVER (<over_order_by_clause>) ]
   
–=============================================
–获取范围的序列值
sp_sequence_get_range [ @sequence_name = ] N'<sequence>’ 
     , [ @range_size = ] range_size
     , [ @range_first_value = ] range_first_value OUTPUT 
    [, [ @range_last_value = ] range_last_value OUTPUT ]
    [, [ @range_cycle_count = ] range_cycle_count OUTPUT ]
    [, [ @sequence_increment = ] sequence_increment OUTPUT ]
    [, [ @sequence_min_value = ] sequence_min_value OUTPUT ]
    [, [ @sequence_max_value = ] sequence_max_value OUTPUT ]
    [ ; ]

–=============================================
–创建初始值为1递增1的序列
CREATE SEQUENCE dbo.mySquence 
AS INT 
INCREMENT BY 1
START WITH 1

–=============================================
–获取下个值
SELECT NEXT VALUE FOR dbo.mySquence
–=============================================
–使用表排序后获取自增序列
SELECT NEXT VALUE FOR dbo.mySquence OVER (ORDER BY C2) AS RID,
C2 FROM [dbo].[TB4]
–=============================================
–可以在列的DEFAULT中使用序列
ALTER TABLE Test.MyTable
ADD DEFAULT N’AdvWorks_’ + 
CAST(NEXT VALUE FOR Test.CounterSeq AS NVARCHAR(20)) 
FOR IDColumn;

–============================================
–获取4个连续的递增序列,并返回最小值
DECLARE @range_first_value sql_variant , 
        @range_first_value_output sql_variant ;

EXEC sp_sequence_get_range
@sequence_name = N’dbo.mySquence’
, @range_size = 4
, @range_first_value = @range_first_value_output OUTPUT ;

SELECT @range_first_value_output AS FirstNumber ;

–=====================================
–查看当前数据库中的自增列
SELECT * FROM sys.identity_columns

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109933.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows下nginx的安装及使用

    windows下nginx的安装及使用windows下nginx的安装及使用

    2022年4月22日
    66
  • sqlserver字符串转换为日期_sqlserver默认日期格式

    sqlserver字符串转换为日期_sqlserver默认日期格式MyBeNsqlserver字符串转成日期格式在SQLServer数据库中,SQLServer日期时间格式转换字符串可以改变SQLServer日期和时间的格式,是每个SQL数据库用户都应该掌握的。本文我们主要就介绍一下SQLServer日期时间转字符串的相关知识,接下来就让我们一起来了解一下这部分内容。字符串转日期时间:convert(datetime,列名)日期时间转字符串…

    2022年10月8日
    1
  • 2021.7goland激活码【2021.7最新】

    (2021.7goland激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    36
  • java泛型详解

    java泛型详解1、什么是java泛型?泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。2、为什么需要泛型?Java语言引入泛型的好处是安全简单。可以将运行时错误提前到编译时错误。在JavaSE1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现

    2022年6月28日
    29
  • mysql和sqlserver区别_一定和必须的区别

    mysql和sqlserver区别_一定和必须的区别区别一mysql支持enum,和set类型,sqlserver不支持mysql不支持nchar,nvarchar,ntext类型mysql的递增语句是AUTO_INCREMENT,而mssql是identity(1,1)msms默认到处表创建语句的默认值表示是((0)),而在mysql里面是不允许带两括号的mysql需要为表指定存储类型mssql识别符是[],[type]表示他区别于…

    2022年9月28日
    0
  • 【超详细】手把手教你ElasticSearch集群搭建

    【超详细】手把手教你ElasticSearch集群搭建1.ElasticSearch快速入门1.1.基本介绍ElasticSearch特色Elasticsearch是实时的分布式搜索分析引擎,内部使用Lucene做索引与搜索实时性:新增到ES中的数据在1秒后就可以被检索到,这种新增数据对搜索的可见性称为“准实时搜索”分布式:意味着可以动态调整集群规模,弹性扩容集群规模:可以扩展到上百台服务器,处理PB级结构化或非结构化数据各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作Lucene是Ja

    2022年10月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号