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
标签:IDENT,插入,作用域,Select,CURRENT,标识,identity,SQL,IDENTITY From: https://www.cnblogs.com/yantingguo/p/18397687