`

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。

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

    因为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(select @@identity)

 

当运行完插入语句后,执行select   @@identity就可得到自动生成的id

如果是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 不受限于特定的作用域。

分享到:
评论

相关推荐

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

    要获取此ID,最简单的方法就是在查询之后select @@indentity –SQL语句创建数据库和表 代码如下: create database dbdemo go use dbdemo go create table tbldemo (  id int primary key identity(1,1),  name ...

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

    对新添加的记录,获得新记录的自动标识列的值,有两种方式:1....2.使用全局变量@@IDENTITY全局变量INSERT INTO table_name(column1,column2,column3)VALUES(”,”,”)SELECT @@IDENTITY AS ID –ADO.NET调用

    SQL2005经典问题教程

    select identity(int,1,1) as autoID, * into #Tmp from tableName select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID select * from #Tmp where autoID in(select autoID from #tmp2) ...

    经典SQL语句大全

    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...

    数据库操作语句大全(sql)

    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...

    C# 中用 Sqlparameter 的两种用法

    id int IDENTITY(1,1) NOT NULL, name nvarchar(100) , sex nvarchar(10) ) insert into abc values(‘asf','男') insert into abc values(‘ai','女') 创建表格完成。 新建一个存储过程: create procedure ...

    sql经典语句一部分

    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...

    通用数据库访问类sql server 版本常用方法封装

    SELECT @@IDENTITY",values).ToInt32(); } * 以上该文件的代码封装的类是部分代码,仅供参考 * 备注信息: 上传部分自己总结的常用方法的封装,有不足和不完美之处,希望大家指出来,愿意一起 * 学习和讨论有关...

    SQL sever 实训

    SELECT * FROM Course --有哪些种类的选修课?学分是多少 USE XK GO SELECT Kind,Credit FROM Crouse GO 修改列名字 SELECT '课程种类'=Kind,'学分'=Credit FROM Course GO --查询Course表的前10行 SELECT TOP ...

    非常实用c#操作Access数据库的例子(application)

    cmd.CommandText = @"select @@identity"; int value = Int32.Parse(cmd.ExecuteScalar().ToString()); return value; 3.执行事务 需要用到OleDbTransaction,关键语句如下: OleDbConnection connection = new ...

    超实用sql语句

    9、说明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’) 10、说明:两张关联表,删除主表中已经在副表中没有的信息 delete from table1 where not exists ( select * ...

    Hibernate注解

    * 5.identity 使用SQL Server和MySQL的自增字段,这个方法不能放到Oracle中,Oracle不支持自增字段,要设定sequence(MySQL和SQL Server中很常用)。等同于JPA中的IDENTITY * 例:@GeneratedValue(generator = ...

    乐优商城.xmind

    @Id & @GeneratedValue(strategy= GenerationType.IDENTITY) 自动增长,适用于支持自增字段的数据库 mapper Mapper IdListMapper 根据id操作数据库 @RequestMapping("category") Controller @...

    SQL提取数据库表名及字段名等信息代码示例

    本文向大家介绍了使用SQL语句提取数据库所有表的表名、字段名的实例代码,在SQLserver 中进行了测试,具体内容如下: --查询所有用户表所有字段的特征 SELECT D.Name as TableName, A.colorder AS ColOrder, A.name...

    Hibernate注释大全收藏

    以上所有实体使用 JOINED 策略 Ferry和Boat class使用同名的主键关联(eg: Boat.id = Ferry.id), AmericaCupClass 和 Boat 关联的条件为 Boat.id = AmericaCupClass.BOAT_ID. 从父类继承的属性 @MappedSuperclass ...

    SqlServer 序号列的实现方法

    代码如下:SELECT [AUTOID] = IDENTITY(int,1,1), * INTO #temp_table FROM 表名; 代码如下:SELECT * FROM #temp_table; 从 SQL SERVER 2005 开始, SQL SERVER 提供了一个 ROW_NUMBER() 函数,大大简化了工作。 ...

    sqlserver自动增长列引起的问题解决方法

    有两个结构完全相同的表,由其中一个表插入... 方法: 代码如下: SET IDENTITY_INSERT test ON insert into test(id,name) select id,name from test2 –必须标明表中所有的字段名</SPAN> SET IDENTITY_INSERT test OF

    酒店系统管理C#语言开发的

    /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { System.Resources.ResourceManager resources = new System.Resources....

    mssql CASE,GROUP BY用法

    代码如下:–create database dbTemp use dbTemp create table test ( Pid int identity(1,1) not null primary key, Years datetime, IsFirstSixMonths int default(0), –0表示上半年1表示下半年– TotalCome int )...

    多功能.NET代码自动生成器2.0版(2010年最新修改)

    以下为使用方法: 1、 适用于.net项目,基于MVC架构模式 2、 按照数据库结构生成基础开发类库 3、 数据库支持SQL2000和SQL2005两个版本 4、 类库为分层框架工厂模式,依次分为:数据库交互层(SqlHelper)、业务实体...

Global site tag (gtag.js) - Google Analytics