dotnet 获得存储过程返回值和输出参数有什么不同 @@IDENTITY SCOPE_IDENTITY()
存储过程1:
Create PROCEDURE CreateNewUser
@UserName varchar(50),
@Password varchar(50),
@Description varchar(50)
AS
INSERT INTO [User](Email, Password, Description)VALUES(@UserName, @Password, @Description)
RETURN @@IDENTITY
存储过程2:
Create PROCEDURE CreateNewUser
@UserName varchar(50),
@Password varchar(50),
@Description varchar(50)
@UserID int output
AS
INSERT INTO [User](Email, Password, Description)VALUES(@UserName, @Password, @Description)
SET @UserID = @@IDENTITY
RETURN 1
两个存储过程的不同之处在于第一个没有输出参数,我用
comm.Parameters.Add(new SqlParameter("ReturnValue",SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null));
ReturnValue=(int)comm.Parameters["ReturnValue"].Value;
结果:调用这两个存储过程都可以得到返回的ID.
请问:
1.用输出参数有什么用途,是不是可以返回多个输出参数.
2.当需要返回一个值时,用return 用户ID 和用输出参数@用户ID int output有什么不同?
3.当我定义了一个输出参数,又在存储过程结尾设置return '某个值',存储过程返回的一定是输出参数的值吗?
1,是的,可以有多个多种类型的输出参数,而返回值只能有1个整型的;
2,没什么不同,不过RETURN @@IDENTITY在并发时会出错,应该使用return SCOPE_IDENTITY();
3,是两个不同的参数,并无什么联系。
Top
返回值只能是一个叫@ReturnValue的整型值。
输出参数可以自己定义多个。Top
1。是的,就像你输入一个用户编号,可以返回用户的所有的注册信息
2。Return返回值只能是一个,
而用output可以是多个,如果你有多个output的话,你可以返回一个数组
3.没有什么关系的,如你输入一个用户编号,你可以返回他的姓名或者是地址什么的Top
return只能返回一个int型的值,而且一旦出现return,储存过程就结束了
而用output则可以是多个而且不限於int型,功能比return 强多了Top
看了 Truly(NULL) 的回答,又让我学了一点^_^Top
返回值都是经常用到,可是也没有用到不是整型的返回值.
今天才知道存储过程只能返回整形的参数吗?
about the difference @@IDENTITY and SCOPE_IDENTITY
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。
假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。
@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。
SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。
有关说明,请参见示例。
示例
下列示例将创建两个表 TZ 和 TY,并在 TZ 上创建一个 INSERT 触发器。当将某行插入表 TZ 中时,触发器 (Ztrig) 将激发并在 TY 中插入一行。
USE tempdb
GO
CREATE TABLE TZ (
Z_id int IDENTITY(1,1)PRIMARY KEY,
Z_name varchar(20) NOT NULL)
INSERT TZ
VALUES ('Lisa')
INSERT TZ
VALUES ('Mike')
INSERT TZ
VALUES ('Carla')
SELECT * FROM TZ
--Result set: This is how table TZ looks
Z_id Z_name
-------------
1 Lisa
2 Mike
3 Carla
CREATE TABLE TY (
Y_id int IDENTITY(100,5)PRIMARY KEY,
Y_name varchar(20) NULL)
INSERT TY (Y_name)
VALUES ('boathouse')
INSERT TY (Y_name)
VALUES ('rocks')
INSERT TY (Y_name)
VALUES ('elevator')
SELECT * FROM TY
--Result set: This is how TY looks:
Y_id Y_name
---------------
100 boathouse
105 rocks
110 elevator
/*Create the trigger that inserts a row in table TY
when a row is inserted in table TZ*/
CREATE TRIGGER Ztrig
ON TZ
FOR INSERT AS
BEGIN
INSERT TY VALUES ('')
END
/*FIRE the trigger and find out what identity values you get
with the @@IDENTITY and SCOPE_IDENTITY functions*/
INSERT TZ VALUES ('Rosalie')
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT @@IDENTITY AS [@@IDENTITY]
GO
--Here is the result set.
SCOPE_IDENTITY
4
/*SCOPE_IDENTITY returned the last identity value in the same scope, which was the insert on table TZ*/
@@IDENTITY
115
/*@@IDENTITY returned the last identity value inserted to TY by the trigger, which fired due to an earlier insert on TZ*/
Top
Truly(NULL) ( )已经说得很详细了Top
Truly 说的很详细了
转载于:https://www.cnblogs.com/zhangliyu/archive/2009/06/26/1511852.html
dotnet 获得存储过程返回值和输出参数有什么不同 @@IDENTITY SCOPE_IDENTITY()相关推荐
- C#获取存储过程返回值和输出参数值的方法
//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...
- 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值...
关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...
- c oracle存储过程返回值,C#调用存储过程详解(带返回值、参数输入输出等)
本文实例讲述了C#调用存储过程的方法.分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @stu ...
- 获取存储过程返回值及代码中获取返回值
获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...
- 获取存储过程返回值及代码中获取返回值(转)
获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...
- 存储过程系列之存储过程返回值总结
sql存储过程返回值总结 1. 存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种 ...
- dapper 调用 存储过程返回值_数据库事务、存储过程、函数以及触发器之间的区别和联系...
一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...
- 函数二的变量作用域,多函数执行,返回值,函数参数,拆包,引用
函数二 一.变量作用域 1.局部变量是函数内部变量,在函数临时保存数据,函数调用完则销毁,在函数外访问即报错 2.全局变量函数内外都可访问,当不同函数都要用到某一变量时,则可使用全局变量 def fu ...
- Matlab函数语法(函数可以接受多个输入参数,并可能返回多个输出参数)
一个函数是一组在一起执行任务的语句. 在MATLAB中,函数在单独的文件中定义.文件的名称和函数的名称应该是一样的. 函数在自己的工作空间内的变量上运行,这个变量也称为本地工作空间,与在MATLAB命 ...
最新文章
- C#2.0模拟List和内置算法
- 关于MySQL索引知识与小妙招 — 学到了!
- 分布式系统架构设计系列文章
- luogu P1659 [国家集训队]拉拉队排练
- mysql 5.6.21不能选择安装路径_mysql5.6.21服务器安装图解(选择安装和数据目录)
- Delphi 11.0 Alexandria 来了
- win10启用php_zip,win10右键没有压缩文件选项怎么办
- 思维导图 XMind 闯关之路(第02关)插入各类符号
- oracle cdr是什么,基础:CDR软件中曲线工具的使用
- 未来已来!域乎“区块链+产业应用赋能精英论坛”成功举办
- u盘文件夹变成应用程序怎么恢复?方法来了!
- 苹果11蓝牙配对不成功怎么办_iphone11蓝牙搜不到设备怎么办
- 阿里物联网平台的使用
- .net Core WebApi记录
- SQL查询语句——子查询
- Python练习题答案: CIS 122#12中的构造【难度:1级】--景越Python编程实例训练营,1000道上机题等你来挑战
- 程序猿之间的鄙视链,你在第几层
- 676.实现一个魔法字典·前缀树
- [附源码]java毕业设计-在线排课系统
- Python turtle 绘制彩色螺旋线
热门文章
- 开源软件 | 深度学习用于道路病害检测
- OpenCV手部关键点检测(手势识别)代码示例
- 重磅!清华商汤开源CVPR2018超高精度人脸对齐算法LAB
- 游戏美术是什么?真的有“钱”景吗?
- PyTorch | torch.from_numpy使用方法 | torch.from_numpy如何使用?torch.from_numpy()例子 | 通过torch.from_numpy创建张量
- 收藏 | 理解卷积神经网络中的自注意力机制
- 《Python编程从入门到实践》记录之列表解析
- 计算机内部总线和外部总线,科学网-怎样将计算机内部总线扩展为外部网络?-姜咏江的博文...
- eigen库学习笔记
- 葡萄酒java_基于jsp的红酒网站-JavaEE实现红酒网站 - java项目源码