这个也是老生常谈的一个东西,特别简单,也特别常用。
在学习以来,我就记得到一种方式,今天经过学习发现,有三种方式可以获取该值,具体如何使用,大家要看看场景了,嘿嘿!
有三个函数分别是:
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 --返回当前会话所有表中生成的最后一个标示值
分享到:
相关推荐
为了获取这个值,我们需要在插入语句中使用`LAST_INSERT_ID()`函数,并在`Statement`对象上设置`RETURN_GENERATED_KEYS`属性: ```java try (Connection conn = DriverManager.getConnection(url, user, password))...
在SQL Server 2008中,为表添加自增列是常见的数据库设计需求,尤其在需要记录数据插入顺序或创建唯一标识时。自增列(IDENTITY列)会在每条新记录插入时自动递增,提供了一个方便的方式来跟踪记录。以下是两种在SQL...
最近在开发项目的过程中遇到一个问题,就是在插入一条记录的后要立即获取所在数据库中ID,而该ID是自增的,怎么做?在sql server 2005中有几种方式可以实现。...–执行下面SQL语句就能查出来刚插入记录对应的自增列的值
SQL插入脚本生成器是一种实用工具,主要用于数据库管理和开发工作中,尤其在数据迁移、测试环境数据准备或批量插入数据时非常有用。C#版本的SQL插入脚本生成器能够根据用户设定的条件,自动化地创建SQL插入语句,极...
这里的关键在于在每次插入后获取数据库返回的自增ID,这通常可以通过SQL的LAST_INSERT_ID()函数或者类似的方法实现,具体取决于你使用的数据库类型。例如,对于MySQL,可以使用`db.LastInsertId()`。 2. **单条插入...
你可以直接从对象中读取这个值,无需额外的查询。 6. **MyBatis注解方式**: 如果你更倾向于使用注解,可以使用`@Options`注解配合`@Param`和`@Result`来实现相同的功能: ```java @Insert("INSERT INTO user...
为了测试上述两个函数,文章提供了一个测试示例,通过插入三条记录到 `CustomIDTest` 表中,分别对应昨天、今天和明天的日期型自增编码。 四、应用场景 该方法可以应用于各种业务系统中,例如: * 序列号生成 * ...
一个简单的数据库链接例子 在WPF界面上进行操作 实现对数据库数据的增删改查 适合初初初学者 高手不要下 也别喷我
在上面的代码中,我们使用了ADO.NET的`SqlConnection`和`SqlCommand`来执行SQL插入语句。`InsertStudent`方法接受一个`Student`对象,并将它的属性值绑定到SQL命令的参数上。`ExecuteNonQuery`方法用于执行非查询...
另一种方法是在`<insert>`标签内添加一个`<selectKey>`标签,这个标签用于执行一个SQL查询来获取自增主键。你需要指定`keyProperty`(同上)和`resultType`(返回类型,通常是整型)。例如: ```xml select ...
这段代码定义了一个名为`insert`的SQL插入语句,其中`keyColumn`指定了主键列`id`,`keyProperty`指定了接收自增长ID的Java属性`id`,而`useGeneratedKeys="true"`启用了获取自增ID的功能。`parameterType`指定了...
在SQL Server中,自增字段通常通过`IDENTITY`属性实现,它会自动为新插入的行生成一个唯一的序列号。然而,在Oracle数据库系统中,没有直接对应的`IDENTITY`功能,但可以通过其他方式来模拟这个行为。这里我们将讨论...
标题"java使用jdbc插入信息时获取id1"指的是在Java程序中,通过JDBC执行SQL插入语句后,如何获取数据库自动生成的唯一标识符(通常是主键ID)。描述中的"设置成可以获取主键"是关键步骤,这可以通过调用`...
当我们在一个具有自增属性的列(如StuID)中插入数据时,不需要显式提供该列的值。对于表`StuInfo`,我们只需要关心`StuName`列的值即可。以下两种插入方式都是正确的: - `INSERT INTO StuInfo(StuName) VALUES('...
在SQL Server中,当我们在表中插入新的记录时,经常需要获取这些新插入记录的唯一标识符,也就是通常所说的自增ID。这个ID通常是由数据库系统自动生成并维护的,对于跟踪和管理记录非常有用。这里我们将详细探讨两种...
2. **SQL Server数据库设置**:创建一个目标数据库和对应的表结构,表结构应与Excel文件中的列对应。可以使用SQL Server Management Studio (SSMS) 创建数据库和表,定义好主键、索引和其他约束。 3. **导入方法...
这种方式可以自动为每一行新插入的数据生成一个唯一的、连续递增的整数值作为主键。然而,在实际应用中,可能会遇到以下问题: 1. **并发控制**:当多个事务同时尝试插入数据时,可能会出现主键冲突的情况,导致...
首先,加载驱动程序(`Class.forName()`),接着创建数据库连接(`DriverManager.getConnection()`),然后创建`Statement`对象并执行SQL插入语句。最后,记得关闭`Statement`和`Connection`对象以释放资源。 同样...