sqlrver存储过程output和return的使⽤⽅法,详解
SQLServer⽬前正⽇益成为WindowNT操作系统上⾯最为重要的⼀种数据库管理系统,随着SQLServer2000的推
出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000系列操作系统⼀统天下的局⾯,在微软的操作系统
上,没有任何⼀种数据库系统能与之抗衡,包括数据库领域中的领头⽺甲⾻⽂公司的看家数据库Oracle在内。不可否
认,SQLServer最⼤的缺陷就是只能运⾏在微软⾃⼰的操作系统上,这⼀点是SQLServer的致命点。但在另⼀⽅⾯
却也成了最好的促进剂,促使SQLServer在⾃⼰仅有的“⼟地”上⾯将⾃⼰的功能发挥到了极⾄最⼤限度的利⽤了NT系
列操作系统的各种潜能!作为SQLServer数据库系统中很重要的⼀个概念就是存储过程,合理的使⽤存储过程,可以
有效的提⾼程序的性能;并且将商业逻辑封装在数据库系统中的存储过程中,可以⼤⼤提⾼整个软件系统的可维护
性,当你的商业逻辑发⽣改变的时候,不再需要修改并编译客户端应⽤程序以及重新分发他们到为数众多的⽤户⼿
中,你只需要修改位于服务器端的实现相应商业逻辑的存储过程即可。合理的编写⾃⼰需要的存储过程,可以最⼤限
度的利⽤SQLServer的各种资源。下⾯我们来看看各种编写SQLServer存储过程和使⽤存储过程的技巧经验。
Input此参数只⽤于将信息从应⽤程序传输到存储过程。
InputOutput此参数可将信息从应⽤程序传输到存储过程,并将信息从存储过程传输回应⽤程序。
Output此参数只⽤于将信息从存储过程传输回应⽤程序。
ReturnValue此参数表⽰存储过程的返回值。SQLServer的存储过程参数列表中不显⽰该参数。它只与存储过程的
RETURN语句中的值相关联。
存储过程为主键⽣成新值后,通常使⽤存储过程中的RETURN语句返回该值,因此⽤来访问该值的参数类型是
ReturnValue参数。
1、不带输⼊参数的简单存储过程
ifobject_id('up_ur')isnotnull
dropprocup_ur
go
createprocup_ur
as
tnocounton
delcare@namevarchar(10)
begin
lect@name=unamefromur
end
tnocountoff
go
ecup_ur
2、带输⼊参数的简单存储过程
ifobject_id('up_ur')isnotnull
dropprocup_ur
go
createprocup_ur
@idint
as
tnocounton
delcare@namevarchar(10)
begin
lect@name=unamefromurwhereuid=@id
end
tnocountoff
go
--执⾏该存储过程
ecup_ur1
3、带Return参数的存储过程
ifobject_id('up_ur')isnotnull
dropprocup_ur
go
createprocup_ur
as
tnocounton
delcare@ageint
begin
lect@age=uagefromur
return@age
end
tnocountoff
go
--执⾏该存储过程
declare@ageint
exec@age=up_ur
lect@age
4、带output参数的存储过程
ifobject_id('up_ur')isnotnull
dropprocup_ur
go
createprocup_ur
@idint,
@namevarchar(10)=''output
as
tnocounton
begin
lect@name=unamefromurwhereuid=@id
end
tnocountoff
go
--执⾏该存储过程
declare@namevarchar(10)
execup_ur2,@nameoutput
lect@name
5、同时带Return和output参数的存储过程
ifexists(lectnamefromsysobjectswherename='up_ur'andtype='p')
dropprocup_ur
go
createprocup_ur
@idint,
@namevarchar(20)output
as
declare@ageint
begin
lect@age=stuage,@name=stunamefromstuinfowhereuid=@id
return@age
end
--执⾏该存储过程
declare@ageint
declare@namevarchar(20)
exec@age=up_ur2,@nameoutput
lect@age,@name
附:SQLServer系统全局变量
@@CONNECTIONS
返回⾃上次启动以来连接或试图连接的次数。
@@CURSOR_ROWS
返回连接上最后打开的游标中当前存在的合格⾏的数量(返回被打开的游标中还未被读取的有效数据⾏的⾏数)
@@DATEFIRST
返回每周第⼀天的数字
@@ERROR
返回最后执⾏的SQL语句的错误代码。
@@FETCH_STATUS
返回被FETCH语句执⾏的最后游标的状态,⽽不是任何当前被连接打开的游标的状态。
@@IDENTITY
返回最后插⼊的标识值
@@LANGID
返回当前所使⽤语⾔的本地语⾔标识符(ID)。
@@LANGUAGE
返回当前使⽤的语⾔名。
@@LOCK_TIMEOUT
返回当前会话的当前锁超时设置,单位为毫秒。
@@PROCID
返回当前过程的存储过程标识符(ID)。
@@ROWCOUNT
返回受上⼀语句影响的⾏数。
@@SERVERNAME
返回运⾏的本地服务器名称。
@@SPID
返回当前⽤户进程的服务器进程标识符(ID)。
@@TRANCOUNT
返回当前连接的活动事务数。
@@VERSION
返回当前安装的⽇期、版本和处理器类型。
@@CPU_BUSY
返回⾃SQLServer最近⼀次启动以来CPU的⼯作时间其单位为毫秒
@@DATEFIRST
返回使⽤SETDATEFIRST命令⽽被赋值的DATAFIRST参数值SETDATEFIRST,命令⽤来指定每周的第⼀天是星
期⼏
@@DBTS
返回当前数据库的时间戳值必须保证数据库中时间戳的值是惟⼀的
@@ERROR
返回执⾏Transact-SQL语句的错误代码
@@FETCH_STATUS
返回上⼀次FETCH语句的状态值
@@IDLE
返回⾃SQLServer最近⼀次启动以来CPU处于空闭状态的时间长短单位为毫秒
@@IO_BUSY
返回⾃SQLServer最近⼀次启动以来CPU执⾏输⼊输出操作所花费的时间其单位为毫秒
@@LANGID
返回当前所使⽤的语⾔ID值
@@LANGUAGE
返回当前使⽤的语⾔名称
@@LOCK_TIMEOUT
返回当前会话等待锁的时间长短其单位为毫秒
@@MAX_CONNECTIONS
返回允许连接到SQLServer的最⼤连接数⽬
@@MAX_PRECISION
返回decimal和numeric数据类型的精确度
@@NESTLEVEL
返回当前执⾏的存储过程的嵌套级数初始值为0
@@OPTIONS
返回当前SET选项的信息
@@PACK_RECEIVED
返回SQLServer通过⽹络读取的输⼊包的数⽬
@@PACK_SENT
返回SQLServer写给⽹络的输出包的数⽬
@@PACKET_ERRORS
返回⽹络包的错误数⽬
@@PROCID
返回当前存储过程的ID值
@@REMSERVER
返回远程SQLServer数据库服务器的名称
@@SERVICENAME
返回SQLServer正运⾏于哪种服务状态之下如MSSQLServerMSDTCSQLServerAgent
@@SPID
返回当前⽤户处理的服务器处理ID值
@@TEXTSIZE
返回SET语句的TEXTSIZE选项值SET语句定义了SELECT语句中text或image数据类型的最⼤长度基本单位为字
节
@@TIMETICKS
返回每⼀时钟的微秒数
@@TOTAL_ERRORS
返回磁盘读写错误数⽬
@@TOTAL_READ
返回磁盘读操作的数⽬
@@TOTAL_WRITE
返回磁盘写操作的数⽬
@@TRANCOUNT
返回当前连接中处于激活状态的事务数⽬
本文发布于:2023-01-04 16:19:54,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/91621.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |