`

执行这个SQL查出来刚插入记录对应的自增列的值

 
阅读更多

这个也是老生常谈的一个东西,特别简单,也特别常用。

在学习以来,我就记得到一种方式,今天经过学习发现,有三种方式可以获取该值,具体如何使用,大家要看看场景了,嘿嘿!

有三个函数分别是:

SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。


例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。


假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。


@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。


SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。


而IDENT_CURRENT('T1') 和 IDENT_CURRENT('T2') 返回的值分别是这两个表最后自增的值。

ajqc的实验:(40条本地线程,40+40条远程线程同时并发测试,插入1200W行),得出的结论是:
1.在典型的级联应用中.不能用@@IDENTITY,在CII850,256M SD的机器上1W多行时就会并发冲突.在P42.8C,512M DDR上,才6000多行时就并发冲突.
2.SCOPE_IDENTITY()是绝对可靠的,可以用在存储过程中,连触发器也不用建,没并发冲突

SELECT IDENT_CURRENT('TableName') --返回指定表中生成的最后一个标示值   
SELECT IDENT_INCR('TableName')--返回指定表的标示字段增量值
SELECT IDENT_SEED('TableName')--返回指定表的标示字段种子值

返回最后插入记录的自动编号
SELECT IDENT_CURRENT('TableName')
返回下一个自动编号:   
SELECT IDENT_CURRENT('TableName') + (SELECT IDENT_INCR('TableName'))

SELECT @@IDENTITY --返回当前会话所有表中生成的最后一个标示值

分享到:
评论

相关推荐

    jdbc 插入记录并返回自增主键值

    为了获取这个值,我们需要在插入语句中使用`LAST_INSERT_ID()`函数,并在`Statement`对象上设置`RETURN_GENERATED_KEYS`属性: ```java try (Connection conn = DriverManager.getConnection(url, user, password))...

    SQL Server 2008怎样添加自增列实现自增序号

    在SQL Server 2008中,为表添加自增列是常见的数据库设计需求,尤其在需要记录数据插入顺序或创建唯一标识时。自增列(IDENTITY列)会在每条新记录插入时自动递增,提供了一个方便的方式来跟踪记录。以下是两种在SQL...

    使用SQL Server 获取插入记录后的ID(自动编号)

    最近在开发项目的过程中遇到一个问题,就是在插入一条记录的后要立即获取所在数据库中ID,而该ID是自增的,怎么做?在sql server 2005中有几种方式可以实现。...–执行下面SQL语句就能查出来刚插入记录对应的自增列的值

    SQL插入脚本生成器

    SQL插入脚本生成器是一种实用工具,主要用于数据库管理和开发工作中,尤其在数据迁移、测试环境数据准备或批量插入数据时非常有用。C#版本的SQL插入脚本生成器能够根据用户设定的条件,自动化地创建SQL插入语句,极...

    Go-beego框架自增id自写方法

    这里的关键在于在每次插入后获取数据库返回的自增ID,这通常可以通过SQL的LAST_INSERT_ID()函数或者类似的方法实现,具体取决于你使用的数据库类型。例如,对于MySQL,可以使用`db.LastInsertId()`。 2. **单条插入...

    mybatis获取自增主键的值

    你可以直接从对象中读取这个值,无需额外的查询。 6. **MyBatis注解方式**: 如果你更倾向于使用注解,可以使用`@Options`注解配合`@Param`和`@Result`来实现相同的功能: ```java @Insert("INSERT INTO user...

    SQLserver中按年月日生成日期型自增编码.pdf

    为了测试上述两个函数,文章提供了一个测试示例,通过插入三条记录到 `CustomIDTest` 表中,分别对应昨天、今天和明天的日期型自增编码。 四、应用场景 该方法可以应用于各种业务系统中,例如: * 序列号生成 * ...

    WPF链接数据库进行增删改查操作_c# wpf sql数据库操作,wpf sql 增删改查-SQLServer代码类(txt为微云链接)

    一个简单的数据库链接例子 在WPF界面上进行操作 实现对数据库数据的增删改查 适合初初初学者 高手不要下 也别喷我

    SqlServer实体类插入库方法

    在上面的代码中,我们使用了ADO.NET的`SqlConnection`和`SqlCommand`来执行SQL插入语句。`InsertStudent`方法接受一个`Student`对象,并将它的属性值绑定到SQL命令的参数上。`ExecuteNonQuery`方法用于执行非查询...

    MyBatis插入时获取自增主键方法

    另一种方法是在`<insert>`标签内添加一个`<selectKey>`标签,这个标签用于执行一个SQL查询来获取自增主键。你需要指定`keyProperty`(同上)和`resultType`(返回类型,通常是整型)。例如: ```xml select ...

    mybatis 获取mysql插入记录的自增长字段值.pdf

    这段代码定义了一个名为`insert`的SQL插入语句,其中`keyColumn`指定了主键列`id`,`keyProperty`指定了接收自增长ID的Java属性`id`,而`useGeneratedKeys="true"`启用了获取自增ID的功能。`parameterType`指定了...

    Oracle 实现类似SQL Server中自增字段的一个办法

    在SQL Server中,自增字段通常通过`IDENTITY`属性实现,它会自动为新插入的行生成一个唯一的序列号。然而,在Oracle数据库系统中,没有直接对应的`IDENTITY`功能,但可以通过其他方式来模拟这个行为。这里我们将讨论...

    java使用jdbc插入信息时获取id1

    标题"java使用jdbc插入信息时获取id1"指的是在Java程序中,通过JDBC执行SQL插入语句后,如何获取数据库自动生成的唯一标识符(通常是主键ID)。描述中的"设置成可以获取主键"是关键步骤,这可以通过调用`...

    mysql 数据库自增id 的总结.docx

    当我们在一个具有自增属性的列(如StuID)中插入数据时,不需要显式提供该列的值。对于表`StuInfo`,我们只需要关心`StuName`列的值即可。以下两种插入方式都是正确的: - `INSERT INTO StuInfo(StuName) VALUES('...

    sql server获得新记录标识列值的二种方法

    在SQL Server中,当我们在表中插入新的记录时,经常需要获取这些新插入记录的唯一标识符,也就是通常所说的自增ID。这个ID通常是由数据库系统自动生成并维护的,对于跟踪和管理记录非常有用。这里我们将详细探讨两种...

    excel数据导入到sql server数据库中,

    2. **SQL Server数据库设置**:创建一个目标数据库和对应的表结构,表结构应与Excel文件中的列对应。可以使用SQL Server Management Studio (SSMS) 创建数据库和表,定义好主键、索引和其他约束。 3. **导入方法...

    解决spring自增型主键问题

    这种方式可以自动为每一行新插入的数据生成一个唯一的、连续递增的整数值作为主键。然而,在实际应用中,可能会遇到以下问题: 1. **并发控制**:当多个事务同时尝试插入数据时,可能会出现主键冲突的情况,导致...

    J2EE开发初步,MyEclipse+SQLServer2000插入、删除、更新、查询步骤+代码

    首先,加载驱动程序(`Class.forName()`),接着创建数据库连接(`DriverManager.getConnection()`),然后创建`Statement`对象并执行SQL插入语句。最后,记得关闭`Statement`和`Connection`对象以释放资源。 同样...

Global site tag (gtag.js) - Google Analytics