zoukankan      html  css  js  c++  java
  • SQL Server存储过程Return、output参数及使用技巧

    Input 此参数只用于将信息从应用程序传输到存储过程。 
    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)
    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
    返回当前连接中处于激活状态的事务数目
  • 相关阅读:
    浅谈Java两种并发类型——计算密集型与IO密集型
    设置线程池的大小
    Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecuto
    gitlab的简单操作
    GitHub vs GitLab:区别?
    前端小知识汇总
    花里胡哨的CSS集锦
    码云如何上传代码
    小程序自定义底部导航
    Vue实践过程中的几个问题
  • 原文地址:https://www.cnblogs.com/mili3/p/3558178.html
Copyright © 2011-2022 走看看