存储过程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()相关推荐

  1. C#获取存储过程返回值和输出参数值的方法

    //转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...

  2. 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值...

    关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...

  3. c oracle存储过程返回值,C#调用存储过程详解(带返回值、参数输入输出等)

    本文实例讲述了C#调用存储过程的方法.分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @stu ...

  4. 获取存储过程返回值及代码中获取返回值

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  5. 获取存储过程返回值及代码中获取返回值(转)

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  6. 存储过程系列之存储过程返回值总结

    sql存储过程返回值总结 1. 存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种 ...

  7. dapper 调用 存储过程返回值_数据库事务、存储过程、函数以及触发器之间的区别和联系...

    一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...

  8. 函数二的变量作用域,多函数执行,返回值,函数参数,拆包,引用

    函数二 一.变量作用域 1.局部变量是函数内部变量,在函数临时保存数据,函数调用完则销毁,在函数外访问即报错 2.全局变量函数内外都可访问,当不同函数都要用到某一变量时,则可使用全局变量 def fu ...

  9. Matlab函数语法(函数可以接受多个输入参数,并可能返回多个输出参数)

    一个函数是一组在一起执行任务的语句. 在MATLAB中,函数在单独的文件中定义.文件的名称和函数的名称应该是一样的. 函数在自己的工作空间内的变量上运行,这个变量也称为本地工作空间,与在MATLAB命 ...

最新文章

  1. C#2.0模拟List和内置算法
  2. 关于MySQL索引知识与小妙招 — 学到了!
  3. 分布式系统架构设计系列文章
  4. luogu P1659 [国家集训队]拉拉队排练
  5. mysql 5.6.21不能选择安装路径_mysql5.6.21服务器安装图解(选择安装和数据目录)
  6. Delphi 11.0 Alexandria 来了
  7. win10启用php_zip,win10右键没有压缩文件选项怎么办
  8. 思维导图 XMind 闯关之路(第02关)插入各类符号
  9. oracle cdr是什么,基础:CDR软件中曲线工具的使用
  10. 未来已来!域乎“区块链+产业应用赋能精英论坛”成功举办
  11. u盘文件夹变成应用程序怎么恢复?方法来了!
  12. 苹果11蓝牙配对不成功怎么办_iphone11蓝牙搜不到设备怎么办
  13. 阿里物联网平台的使用
  14. .net Core WebApi记录
  15. SQL查询语句——子查询
  16. Python练习题答案: CIS 122#12中的构造【难度:1级】--景越Python编程实例训练营,1000道上机题等你来挑战
  17. 程序猿之间的鄙视链,你在第几层
  18. 676.实现一个魔法字典·前缀树
  19. [附源码]java毕业设计-在线排课系统
  20. Python turtle 绘制彩色螺旋线

热门文章

  1. 开源软件 | 深度学习用于道路病害检测
  2. OpenCV手部关键点检测(手势识别)代码示例
  3. 重磅!清华商汤开源CVPR2018超高精度人脸对齐算法LAB
  4. 游戏美术是什么?真的有“钱”景吗?
  5. PyTorch | torch.from_numpy使用方法 | torch.from_numpy如何使用?torch.from_numpy()例子 | 通过torch.from_numpy创建张量
  6. 收藏 | 理解卷积神经网络中的自注意力机制
  7. 《Python编程从入门到实践》记录之列表解析
  8. 计算机内部总线和外部总线,科学网-怎样将计算机内部总线扩展为外部网络?-姜咏江的博文...
  9. eigen库学习笔记
  10. 葡萄酒java_基于jsp的红酒网站-JavaEE实现红酒网站 - java项目源码