“Fork

SQL数据库:SQL语句中的Select@@identity用法

select @@identity的用法

 

使用select @@当最后一次插入记录时,identity自动生成ID

如果您使用存储过程,将非常简单,代码如下:SET @NewID=@@IDENTITY

说明:

在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 它包含了这个句子产生的最终标识值。如果这个句子不影响任何有标识列的表, @@IDENTITY 返回 NULL。若插入多行,则会产生多个标识值,@@IDENTITY 返回最终产生的标识值。如果该句子激发了一个或多个执行产生标识值的插入式触发器,则在执行后立即调用该句子 @@IDENTITY 将触发器产生的最终标识值返回。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务回滚, @@IDENTITY 以前的设置是否会恢复值。

返回插入表的 @@IDENTITY 列的最后一个值,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。

@@IDENTITY 和 SCOPE_IDENTITY 最后一个标识值将返回到当前会话所有表中生成的。但是,SCOPE_IDENTITY 返回值仅在当前作用域内, @@IDENTITY 不限于特定的作用域。

IDENT_CURRENT 受指定表格的限制,不受作用域和会话的限制。IDENT_CURRENT 返回特定表在任何会话和任何功能域生成的标识值。有关更多信息,请参见 IDENT_CURRENT。

示例

将下面的示例插入带标志列的表中,并使用 @@IDENTITY 新行中使用的标识值显示。

INSERT INTO infoclass (infoclass) VALUES ('Accountant')

此时,我们插入一个记录,我们使用语句获得标识值:

SELECT @@IDENTITY AS 'Identity'

我的表infoclass中有一个ID字段,它的原始值是14。插入新记录后,它自动产生值15。因此,上述命令执行后的返回值为:15。

下面说说怎么在.插入记录后的ID值在net中得到。

因为Sqlserver为我们提供了多个查询功能,这极大地促进了我们的工作。请参见:

Dim sql As String = "INSERT INTO jobs (job_desc,min_lvl,max_lvl) VALUES ('A new job', 25, 100);" & _

"SELECT job_id FROM jobs WHERE job_id = @@IDENTITY"

Dim cmd As New SqlCommand(sql, cn)

从上面可以看出,Sqlcommand可以执行多个句子,在每个句子之间使用“;“分离。第一条执行插入,第二条返回最终插入记录的ID值。因为查询返回是单列的,而且值也是唯一的,ExecuteScalar可以用来获得:

Dim jobId As Integer = CInt(cmd.ExecuteScalar())A

2.insert into 自动插入id后,获得自动插入id(select @@identity)

 

操作后插入语句时,执行selectt @@identity可以自动生成identity

假如是sql server 最好使用select SCOPE_IDENTITY() as id

因为@@@identity的全局

同类也有IDENT__CURRENT(‘table’)

IDENT_CURRENT 返回任何会话和任何作用域中特定表最终生成的标识值。IDENT_CURRENT 受指定表格的限制,不受作用域和会话的限制。IDENT_CURRENT 返回任何会话和作用域中特定表产生的值。

@@IDENTITY 返回当前会话所有功能域中任何表最终生成的标识值。

SCOPE_IDENTITY 返回当前会话和当前作用域中任何表最终生成的标识值

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

 

转自www.tulingxueyuan.cn/tlzx/jsp/3641.html

posted @ 2024-09-05 09:12  颜廷国  阅读(240)  评论(0编辑  收藏  举报