sqlserver存储过程output和return的使⽤⽅法,详解
SQL Server⽬前正⽇益成为WindowNT操作系统上⾯最为重要的⼀种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000系列操作系统⼀统天下的局⾯,在微软的操作系统上,没有任何⼀种数据库系统能与之抗衡,包括数据库领域中的领头⽺甲⾻⽂公司的看家数据库Oracle在内。不可否认,SQL Server最⼤的缺陷就是只能运⾏在微软⾃⼰的操作系统上,这⼀点是SQL Server的致命点。但在另⼀⽅⾯却也成了最好的促进剂,促使SQL Server在⾃⼰仅有的“⼟地”上⾯将⾃⼰的功能发挥到了极⾄最⼤限度的利⽤了NT系列操作系统的各种潜能!作为SQL Server数据库系统中很重要的⼀个概念就是存储过程,合理的使⽤存储过程,可以有效的提⾼程序的性能;并且将商业逻辑封装在数据库系统中的存储过程中,可以⼤⼤提⾼整个软件系统的可维护性,当你的商业逻辑发⽣改变的时候,不再需要修改并编译客户端应⽤程序以及重新分发他们到为数众多的⽤户⼿中,你只需要修改位于服务器端的实现相应商业逻辑的存储过程即可。合理的编写⾃⼰需要的存储过程,可以最⼤限度的利⽤SQL Server的各种资源。下⾯我们来看看各种编写SQL Server存储过程和使⽤存储过程的技巧经验。
Input 此参数只⽤于将信息从应⽤程序传输到存储过程。
InputOutput 此参数可将信息从应⽤程序传输到存储过程,并将信息从存储过程传输回应⽤程序。
Output 此参数只⽤于将信息从存储过程传输回应⽤程序。
ReturnValue 此参数表⽰存储过程的返回值。SQL Server 的存储过程参数列表中不显⽰该参数。它只与存储过程的RETURN 语句中的值相关联。
  存储过程为主键⽣成新值后,通常使⽤存储过程中的 RETURN 语句返回该值,因此⽤来访问该值的参数类型是ReturnValue 参数。
1、不带输⼊参数的简单存储过程
if object_id('up_user') is not null
drop proc up_user
go
create proc up_user
as
set nocount on
delcare @name varchar(10)
begin
select @name=uname from user
end
set nocount off
go
esec up_user
2、带输⼊参数的简单存储过程
if object_id('up_user') is not null
drop proc up_user
go
create proc up_user
@id int
as
set nocount on
delcare @name varchar(10)
output的反义词begin
select @name=uname from user where  uid=@id
end
set nocount off
go
--执⾏该存储过程
esec up_user 1
3、带Return参数的存储过程
if object_id('up_user') is not null
drop proc up_user
go
create proc up_user
as
set nocount on
delcare @age int
begin
select @age=uage from user
return @age
end
set nocount off
go
--执⾏该存储过程
declare @age int
exec @age=up_user
select @age
4、带output参数的存储过程
if object_id('up_user') is not null
drop proc up_user
go
create proc up_user
@id int,
@name varchar(10) ='' output
as
set nocount on
begin
select @name=uname from user where uid=@id
end
set nocount off
go
-
-执⾏该存储过程
declare @name varchar(10)
exec up_user 2, @name output
select @name
5、同时带Return和output参数的存储过程
if exists(select name from sysobjects where name='up_user' and type='p') drop proc up_user
go
create proc up_user
@id int,
@name varchar(20) output
as
declare @age int
begin
select @age=stuage,@name=stuname from stuinfo where uid=@id return @age
end
--执⾏该存储过程
declare @age int
declare @name varchar(20)
exec @age=up_user 2,@name output
select @age,@name
附:SQL Server 系统全局变量
@@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
返回⾃SQL Server 最近⼀次启动以来CPU 的⼯作时间其单位为毫秒
@@DATEFIRST
返回使⽤SET DATEFIRST 命令⽽被赋值的DATAFIRST 参数值SET DATEFIRST,命令⽤来指定每周的第⼀天是星期⼏
@@DBTS
返回当前数据库的时间戳值必须保证数据库中时间戳的值是惟⼀的
@@ERROR
返回执⾏Transact-SQL 语句的错误代码
@@FETCH_STATUS
返回上⼀次FETCH 语句的状态值
@@IDLE
返回⾃SQL Server 最近⼀次启动以来CPU 处于空闭状态的时间长短单位为毫秒
@@IO_BUSY
返回⾃SQL Server 最近⼀次启动以来CPU 执⾏输⼊输出操作所花费的时间其单位为毫秒
@@LANGID
返回当前所使⽤的语⾔ID 值
@@LANGUAGE
返回当前使⽤的语⾔名称
@@LOCK_TIMEOUT
返回当前会话等待锁的时间长短其单位为毫秒
@@MAX_CONNECTIONS
返回允许连接到SQL Server 的最⼤连接数⽬
@@MAX_PRECISION
返回decimal 和numeric 数据类型的精确度
@@NESTLEVEL
返回当前执⾏的存储过程的嵌套级数初始值为0
@@OPTIONS
返回当前SET 选项的信息
@@PACK_RECEIVED
返回SQL Server 通过⽹络读取的输⼊包的数⽬
@@PACK_SENT
返回SQL Server 写给⽹络的输出包的数⽬
@@PACKET_ERRORS
返回⽹络包的错误数⽬
@@PROCID
返回当前存储过程的ID 值
@@REMSERVER
返回远程SQL Server 数据库服务器的名称
@@SERVICENAME
返回SQL Server 正运⾏于哪种服务状态之下如MSSQLServer MSDTC SQLServerAgent
@@SPID
返回当前⽤户处理的服务器处理ID 值
@@TEXTSIZE
返回SET 语句的TEXTSIZE 选项值SET 语句定义了SELECT 语句中text 或image数据类型的最⼤长度基本单位为字节
@@TIMETICKS
返回每⼀时钟的微秒数
@@TOTAL_ERRORS
返回磁盘读写错误数⽬
@@TOTAL_READ
返回磁盘读操作的数⽬
@@TOTAL_WRITE
返回磁盘写操作的数⽬
@@TRANCOUNT
返回当前连接中处于激活状态的事务数⽬

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。