存储过程output
① 存储过程 output关键字是什么意思
Out是参数,传进、传出,缺一不可,在存储过程定义的时候一定要有out标识,在调用该存储过程的时候也要有out标识 OutPut则是相当于存储过程的返回值不用传进,也不能传进它是在存储过程中定义,并且输出的 一句话:Out相当于C#中的ref参数(传进、传出缺一不可),而且传进传出的时候都要标识为ref OutPut则为C#中的方法返回值类型,在方法定义时就已经定好了
② 存储过程参数输入和输出参数有什么作用
无论是输入的参数还是输出的参数,在此过程中都视为一个参数,所以一般情况下对应你定义的参数类型和个数带入,便可调用。
存储过程后面的是参数列表,其实存储过程就是个方法,通过传递参数来指导方法完成。输出参数相当于返回值,会带output关键字。
其它参数要提前赋值,而output不需要提前赋值,只需要提供一个变量,在存储过程执行完的时候,output类型的变量值就会修改,获得返回值,只能通过这个方法获得返回值,而不能像函数一样直接返回结果。因为存储过程是没有返回值的。
(2)存储过程output扩展阅读
1、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般sql语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2、当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3、存储过程可以重复使用,可减少数据库开发人员的工作量。
4、安全性高,可设定只有某些用户才具有对指定存储过程的使用权。
③ 关于C#存储结构中的output的用法
input
是输入参数
output
是输出参数
return
是返回值,是存储过程中调用
return
语句返回的值,调用此语句也就代表存储过程返回了,执行完毕
一般如果只需要存储过程返回一个值,那么使用return就行了
如果需要多个值,那么就需要output参数交互取值
也就是说output和return取得的效果是相同的
④ c# 处理存储过程output返回值的问题
因为ExecuteReader每次读取一行,没有和数据库断开连接,就像一个方法正在执行中,还没执行return呢。所以没值。
而ExecuteNonQuery是根据条件全查出来了放在你本地内存,就像一个方法执行完一样,所以return也执行了,也就有值。
返回值我一般写在添加等操作的存储过程里,查询没必要即查询结果还要在附带一个返回值。不如只查结果,返回值不就是通过一些计算得来的吗,完全可以在代码中计算出来。
比如我添加的存储过程是:
ALTER PROC [dbo].[sp_InsertModal]
@ModalName int
AS
INSERT tb_Modal(ModalName) values(@ModalName);
SELECT @@IDENTITY;
通过@@IDENTITY我能在添加一条数据后,直接拿到此数据的id数(自动增长的)。
像查询的都写成:
ALTER PROC [dbo].[sp_SelectLog]
@LogWork VARCHAR(50),
@StartTime DATETIME,
@EndTime DATETIME,
@UserId INT,
@ModalId INT
AS
SELECT LogId,LogWork,CreateTime,UserId,ModalId
FROM tb_Log tl
WHERE (@LogWork='' OR tl.LogWork=@LogWork)
AND (@StartTime <= tl.CreateTime AND @EndTime >= tl.CreateTime)
AND (@UserId = 0 OR tl.UserId = @UserId)
AND (@ModalId = 0 OR tl.ModalId = @ModalId)
楼主考虑一下,如果存储过程不好解决可以试着在代码中去处理。 因为存储过程也是类似于程序中的方法。在存储过程里面处理业务逻辑和方法里面是一样的。但你要考虑那个更适合你的程序。
⑤ sql存储过程中的output的作用是什么
output的参数是输出参数,执行完了存储过程之后,这个参数的值会发生变化
不能理解为return,如果要类比,你可以理解为ref或者Out