如何得到SqlServer的自增ID:
SqlServer中的自增的ID的最后的值:
SELECT SCOPE_IDENTITY() --返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。
SELECT @@IDENTITY --返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值
SELECT IDENT_CURRENT('TbName')--不受作用域和会话的限制,而受限于指定的表。
IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
参考的例子如下:
USE pubs
DROP TABLE t6
DROP TABLE t7
GO
CREATE TABLE t6(id int IDENTITY)
CREATE TABLE t7(id int IDENTITY(100,1))
GO
CREATE TRIGGER t6ins ON t6 FOR INSERT
AS
BEGIN
INSERT t7 DEFAULT VALUES
SELECT @@IDENTITY as [@@IDENTITY]
SELECT SCOPE_IDENTITY() as [SCOPE_IDENTITY]
END
GO
--end of trigger definition
SELECT * FROM t6
--id is empty.
SELECT * FROM t7
--id is empty.
--Do the following in Session 1
INSERT t6 DEFAULT VALUES
SELECT @@IDENTITY
/*Returns the value 100, which was inserted by the trigger.*/
SELECT SCOPE_IDENTITY()
/* Returns the value 1, which was inserted by the
INSERT stmt 2 statements before this query.*/
return
SELECT IDENT_CURRENT('t7')
/* Returns value inserted into t7, i.e. in the trigger.*/
SELECT IDENT_CURRENT('t6')
/* Returns value inserted into t6, which was the INSERT statement 4 stmts before this query.*/
-- Do the following in Session 2
SELECT @@IDENTITY
/* Returns NULL since there has been no INSERT action
so far in this session.*/
SELECT SCOPE_IDENTITY()
/* Returns NULL since there has been no INSERT action
so far in this scope in this session.*/
SELECT IDENT_CURRENT('t7')
/* Returns the last value inserted into t7.*/
总结:
对于马上使用的刚才插入的新记录ID用SCOPE_IDENTITY()是最合适的;
对于想要得到一系列的操作中最后得到的那个自增的ID最好用@@IDENTITY;
对于想要得到一个表中的最后一个插入操作所产生的ID的最好用IDENT_CURRENT('TBName')
相关推荐
SqlServer 在中获得自增ID的两种方式.存储过程或SQL语句中插入数据后,自动获取自增的ID
在SQL Server 2012中,自增ID(Identity列)是数据库设计中的常见元素,用于自动为新插入的行生成唯一的标识符。然而,有时可能会遇到自增ID值跳过特定数值,例如从一个ID跳到1000或2000的情况。这种问题通常是由于...
1、SQL server中创建表,带有自增列。 create table Test_Table(Id int Identity(1,1), Name varchar(20)); 这里用到了IDENTITY 关键字。IDENTITY(a,b),a b均为正整数,a表示开始数,b表示步长。 IDENTITY(1,1)就...
使用c# 编写的 sqlserver udf 雪花函数 编译环境为 .net framework 4.5 目标数据库为 sqlserver2012 实际可以在 sqlserver2012-2019 上发布使用 注: 1. 需要开启多个实例权限 2. 需要开启单数据库信任 3. 该程序...
sqlserver在有数据情况下修改主键为自增 网上方法都有缺陷 自己写了一个版本,欢迎大家参考,不好用吗,大家都不评价
除了手动控制自增长,SQL Server还提供了其他一些与自增列相关的操作。例如,你可以使用 `DBCC CHECKIDENT` 来查看或重置自增长列的当前值。如果你需要批量修改自增列,可以使用 `UPDATE` 语句,但必须在 `SET ...
SQL Server 中调整自增字段的当前初始值 SQL Server 中调整自增字段的当前初始值是指在 SQL Server 中对自增字段的当前初始值进行调整,以解决自增字段的当前初始值与数据库维护的初始自增值不一致的问题。 在 SQL...
SQL Server 中按年月日生成日期型自增编码 本文档介绍了在 SQL Server 中生成日期型自增编码的方法,通过创建两个函数 `GenCustomCode` 和 `GenCustomID`,可以生成按年月日的日期型自增编码。该方法可以应用于各种...
SQL SERVER 自增列,也称为标识列,是数据库设计中常用的一种特性,特别是在关系型数据库管理系统如SQL Server中。自增列通常用作主键的一部分,自动递增其值,为新插入的每一行提供一个唯一的标识。这极大地方便了...
数据库自增列主键在数据库还原时百分百会出问题 为解决该问题特开发自定义式的主键 创建一个监控表,一个被调用的存储过程即可,推荐有存储过程编广泛使用的程序使用 调用方法 DECLARE @PKID CHAR(12)='' EXEC [dbo]....
SQL Server 平台修改自增列值 由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语句修改自增列值,是严格不允许的,直接报错(无法更新标识列 ‘自增列名称‘)。sql server我测试...
总之,SQL Server 提供的 `OUTPUT` 子句是获取自增ID的一种强大工具,特别是在事务处理中。通过这种方式,开发者可以确保在插入数据的同时获取并处理新生成的ID,从而实现更复杂的数据操作和业务逻辑。
在mysql中,直接把表的主键设为auto_increment类型,在MS SQLServer中,如果把表的主键设为identity类型, 在Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给...
在SQL Server数据库管理系统中,自动增长(Identity)字段是一个非常重要的特性,主要用于为表中的记录生成唯一的标识符,通常作为主键使用。本教程将详细解释如何在SQL Server中设置和管理自动增长字段。 首先,...
在SQL Server中,"sqlserver自动增长列引起的问题解决方法"这个标题涉及到的是数据库操作时遇到的一个特定问题,即在尝试向具有自动增长标识列(IDENTITY列)的表中插入数据时,如果直接尝试插入包含该列的值,系统...
选择源(SQL Server)和目标(MySQL)数据库,添加需要迁移的表,设置迁移选项,如是否保留自增ID,是否清空目标表等。然后,启动数据传输过程。 5. **验证和优化**: 完成迁移后,务必验证新表的数据是否正确无误...
在SQL Server 2012中,用户可能会遇到一个特定问题,即在重启数据库服务后,自增ID字段(如主键)会自动跳过1000个值。这可能会对数据一致性造成影响,尤其是在有严格顺序需求或依赖于这些ID的业务逻辑中。本文将...
在SQL Server中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行,以实现复杂的数据完整性规则或业务逻辑。本篇将深入探讨触发器的基本概念、类型、分类及如何实现...
SQL Server 中数据表往往会设置自增列,常见的比如说 首列的ID列。 往数据表插入新数据的时候,自增列是跳过的,无需插入即会按照设置的自增规则进行列增长。那么,如果我们想往自增列插入我们指定的数据时该怎么做...