在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()