• 售前

  • 售后

热门帖子
入门百科

sql语句返回主键SCOPE_IDENTITY()

[复制链接]
淡淡如菊795 显示全部楼层 发表于 2021-10-26 14:23:08 |阅读模式 打印 上一主题 下一主题
在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()

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作