Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TSQL–标示列、GUID 、序列

TSQL–标示列、GUID 、序列

作者头像
全栈程序员站长
发布于 2022-07-05 01:25:56
发布于 2022-07-05 01:25:56
9120
举报

–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.cn/109933.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年8月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
技术分享 | 从 MySQL 到 OBOracle:如何处理自增列?
爱可生 DBA 团队成员,一位会摄影、会铲屎、会打球、会骑车、生活可以自理的 DBA
爱可生开源社区
2023/08/18
4020
技术分享 | 从 MySQL 到 OBOracle:如何处理自增列?
OB 运维 | MySQL 迁移 Oracle 场景中自增主键的实践
作者:赵黎明,爱可生 MySQL DBA 团队成员,熟悉 Oracle、MySQL 等数据库,擅长数据库性能问题诊断、事务与锁问题的分析等,负责处理客户 MySQL 及我司自研 DMP 平台日常运维中的问题,对开源数据库相关技术非常感兴趣。
爱可生开源社区
2023/10/23
4100
OB 运维 | MySQL 迁移 Oracle 场景中自增主键的实践
我的MYSQL学习心得(一) 简单语法
使用MYSQL有一段时间了,由于公司使用SQLSERVER和MYSQL,而且服务器数量和数据库数量都比较多
跟着阿笨一起玩NET
2018/09/20
2.4K0
我的MYSQL学习心得(一) 简单语法
Oracle 序列 视图 索引 同义词
Oracle 12C 之后,Oracle 之中提供的是一种手工的自动增长列控制,而这样的控制在 Oracle 之中使用序列(对象)完成。
星哥玩云
2022/08/17
4380
Mybatis 手撸专栏|第15章:返回Insert操作自增索引值
在前面的章节中,我们已经学习了Mybatis基本的增删改查操作,并且通过ResultMap将查询结果映射为Java对象。但是,对于Insert操作而言,我们通常需要获取新插入记录的自增索引值,以便于后续的操作和处理。
啵啵肠
2023/11/14
5100
用Sql生成数据插入Sql脚本
CREATE PROCEDURE dbo.UspOutputData @tablename sysname AS declare @column varchar(1000) declare @columndata varchar(1000) declare @sql varchar(4000) declare @xtype tinyint declare @name sysname declare @objectId int declare @objectname sysname decl
脑洞的蜂蜜
2018/02/01
1.3K0
SQL Server 返回最后插入记录的自动编号ID
有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。 IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。 @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。 SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值
全栈程序员站长
2021/08/12
2.4K0
sql 表有没有自增列,插入自增列值
创建一个表 create table demoTb ( ID int identity(1,1) primary key, name varchar(30) )   查看有没有自增列  有就返回YES IF ((SELECT OBJECTPROPERTY( OBJECT_ID(N'demoTb'), 'TableHasIdentity')) = 1) PRINT 'Yes' ELSE PRINT 'No'   如果想插入自增列的值就 declare @tableName varchar
lpxxn
2018/01/31
1.2K0
sql 表有没有自增列,插入自增列值
C# insert into 一条记录后获取该记录的自动增长列ID
create table test ( id int identity(1,1) not null, name nvarchar(20) )
aehyok
2018/09/11
3.7K0
C# insert into 一条记录后获取该记录的自动增长列ID
《MySQL核心知识》第7章:插入、更新、删除
今天是《MySQL核心知识》专栏的第7章,今天为大家系统的讲讲MySQL中的插入、更新、删除语句,希望通过本章节的学习,小伙伴们能够举一反三,彻底掌握MySQL中的各种插入、更新、删除语句。好了,开始今天的正题吧。
冰河
2022/09/22
9030
《MySQL核心知识》第7章:插入、更新、删除
powerdesigner 15 如何导出sql schema
PowerDesigner导出所有SQL脚本 操作:Database=>Generate Database PowerDesigner怎么导出建表sql脚本 1 按照数据库类型,切换数据库。 Database-> Change Current DBMS... 2 生成sql脚本 Database -> Database Generation 的Preview选项卡 点击保存按钮,保存产生的sql脚本到本地。 【注意】: 1 本人使用的powerDesigner是15.2版本。 2 产生出的sql脚本一般会有
Java学习123
2018/05/16
1.8K0
@@IDENTITY与SCOPE_IDENTITY() 及IDENT_CURRENT 的区别
本文转载:http://www.cnblogs.com/lovemyth/archive/2007/03/14/674584.html
跟着阿笨一起玩NET
2018/09/18
1K0
SqlAlchemy 2.0 中文文档(五十二)
除了上述具有原生 SQLAlchemy 支持的 DBAPI 层之外,还有适用于 SQL Server 的与第三方方言兼容的其他 DBAPI 层。请参阅 Dialects 页面上的“外部方言”列表。 ## 自动递增行为 / IDENTITY 列
ApacheCN_飞龙
2024/08/01
8420
增加删除字段修改字段名,修改表结构,非常用SQL语句技巧总结
Alter TABLE [dbo].[CustomerBackupConfig] Add [Stamp] [timestamp] NULLGO
用户5745385
2019/10/22
2.3K0
SqlServer批量刷数据执行事务回滚语句备份
      企业进行对数据库执行刷数据工作,一段很长的语句希望同时成功或者失败时用到。 1.建立测试环境 /**********************************************
用户1055830
2018/01/18
1.3K0
关于mysql自增id的获取和重置
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)
帘卷西风
2018/08/03
12K0
MySQL 序列使用
MySQL 序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。
用户4988085
2021/07/25
1K0
那些年我们写过的T-SQL(下篇)
下篇的内容很多都会在工作中用到,尤其是可编程对象,那些年我们写过的存储过程,有木有?到目前为止很多大型传统企业仍然很依赖存储过程。这部分主要难理解的部分是事务和锁机制这块,本文会进行简单的阐述。虽然很多SQL命令可以通过工具自动生成,但如果能通过记忆的话速度会更快,那么留给自己思考的时间就越多。此外,由于锁这部分知识比较复杂,不同的数据库厂商的实现也有不同,SQLSERVER除了我们常见的共享锁、排它锁(包括表级、页级、行级),意向锁,还有一些更复杂的锁,如自旋锁等,这部分内容会在之后的T-SQL深入解析部
用户1216676
2018/01/24
2.1K0
那些年我们写过的T-SQL(下篇)
关于 Oracle 的自增序列
因为Oracle中的自增序列与MySQL数据库是不一样的,所以在这里记录一下Oracle的自增序列。
星哥玩云
2022/08/18
1.1K0
《MySQL核心知识》第4章:简单语法
今天是《MySQL核心知识》专栏的第4章,今天跟大家一起聊聊MySQL的简单语法。好了,开始今天的正题。
冰河
2022/08/05
1K0
相关推荐
技术分享 | 从 MySQL 到 OBOracle:如何处理自增列?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档