欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sql语句返回主键SCOPE_IDENTITY()

程序员文章站 2023-12-05 18:45:58
在sql语句后使用 scope_identity() 当然您也可以使用 select @@identity 但是使用 select @@identity是去全局最新. 有可...
在sql语句后使用
scope_identity()

当然您也可以使用 select @@identity

但是使用 select @@identity是去全局最新. 有可能取得值不正确.

示例:
复制代码 代码如下:

insert into dbo.sns_blogdata(username) values('jiangyun') ;
select scope_identity()

获取sql-server数据库insert into操作的主键返回值,scope_identity

插入一条记录后想要立刻获取其数据表中的主键返回值。这个主键是自动生成的,其实实现的方式有很多,比如再进行一次查询,获取出来。或者在插入数据之前取 出最大值,在最大值上面加一等等,方法很多,但是有些很不方便。
个人感觉最快的方式就是,在插入数据后直接获取主键的值,然后返回过来。
方法如下:
sql语句如下:
insert into tablename (fieldname ...) values (value ...) select @@identity as returnname;
在sql语句中加入select @@identity as returnname;用来获取主键的值
在程序中 获取返回值:
复制代码 代码如下:

public int sqlexecutereader(string sql)
{
dbopen();
sqlcommand mycomm = new sqlcommand(sql, connection);
int newid = convert.toint32(mycomm.executescalar());
dbclose();
return newid;
}

当然在此处主键是int类型的自动增加的。dbopen();dbclose();的操作在此就 不多说了。

select scope_identity()

返回上面操作的数据表最后row的identity 列的值;

返回插入到同一作用域中的 identity 列内的最后一个 identity 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

select @@identity

返回上面操作最后一个数据表的最后row的identity 列的值;
创建表:

create table t_user(f_id int identity(1,1) not null,f_name varchar(20) not null)
插入数据:

insert into t_user(f_name) values('我是谁') select scope_identity()
存储过程:

create procedure [dbo].[sp_user](@f_name int) as
begin tran insertinto_t_user
insert into dbo.t_user(f_name) values(@f_name)
select scope_identity()