博客
关于我
SQL SERVER(36)存储过程
阅读量:206 次
发布时间:2019-02-28

本文共 3274 字,大约阅读时间需要 10 分钟。

1.CREATE PROCEDURE (Transact-SQL)

-- Transact-SQL Syntax for Stored Procedures in SQL Server and Azure SQL DatabaseCREATE [ OR ALTER ] { PROC | PROCEDURE }    [schema_name.] procedure_name [ ; number ]    [ { @parameter [ type_schema_name. ] data_type }        [ VARYING ] [ = default ] [ OUT | OUTPUT | [READONLY]    ] [ ,...n ][ WITH 
[ ,...n ] ][ FOR REPLICATION ]AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }[;]
::= [ ENCRYPTION ] [ RECOMPILE ] [ EXECUTE AS Clause ]
  • schema_namc:架构名。
  • procedurc_name:存储过程名。
  • number:对同名过程进行分组的选项,使用drop procedure语句可以将这些分组过程一起删除.
  • @parameter:存储过程的参数。
  • [type_schema name.]data_type:参数的架构及类型。
  • VARYING:指定作为输出参数支持的结果集,仅适用于cursor参数。
  • default:参数的默认值,如果定义了default值,则无须指定此参数的值也可执行存储
  • 过程。
  • OUTPUT:输出参数,此选项的值可以返回给调用存储过程的语句.
  • ENCRYPTION:加密存储过程。
  • RECOMPILE:指明该存储过程在运行时才编译,不预编译。
  • EXECUTE_AS_ Clause:指定执行存储过程的安全上下文。
  • FOR REPLICATION:不能在订阅服务器上执行为复制创建的存储过程。
  • (sql_statement>语法块:存储过程执行的T-SQL语句。
  • <method_specifier>语法块:指定.NET Framework程序集的方法,以便CLR存储过程引用。
--创建存储过程CREATE PROC ProGetAuthorsASSELECT *FROM authorsgoEXEC progetauthors

2.使用EXECUTE语句调用存储过程

    语法格式。

    [EXEC[UTE]]
   {
    [@return_status =]
    (  procedure_name  [  ;number]  I  @procedure_name_ var
    }
    [[@parameter=]  {value | @variable[OUTPUT]  I  [DEFAULT]]
    [,…n]
    [WITH RECOMPILE]
    其中,大部分的参数与CREATE PROCEDURE的参数含义相同.

  •     @return_Btatus:是一个可选的整型变量,保存存储过程的返回状态。这个变量在用于EXECUTE语句前,必须在批处理、存储过程或函数中声明过。
  •      @procedure_name_ var:是局部定义变量名,代表存储过程名称。

3.创建带输入参数的存储过程

    例   在test数据库中创建—个名为procGetAvgMaxMin的存储过程.用于查询特定课程的考试成绩平均分、最高分和最低分。使用EXECUTE语句调用该存储过程查询“信息基础“的各项分数

CREATE PROC procGetAvgMaxMin            @course_name char (20)ASSELECT   AVG(exam)  AS 平均分,         MAX(exam)  AS 最高分,         MIN(exam)  AS 最低分FROM       score AS sINNER JOIN course AS c       ON  s.cno=c.cnoWHERE      c.cname=@course_nameGO/*调用存储过程procGeCAvgMaxMin.查询“信息基础”的各项分数*/EXEC procGetAvgMaxMin  '信息基础'

4.给输入参数设置默认值

CREATE PROC procGetAvgMaxMin            @course_name char (20)=NULLASIF @course_name IS NULL    PRINT '请提供课程名称'ELSESELECT   AVG(exam)  AS 平均分,         MAX(exam)  AS 最高分,         MIN(exam)  AS 最低分FROM       score AS sINNER JOIN course AS c       ON  s.cno=c.cnoWHERE      c.cname=@course_nameGO/*调用存储过程procGeCAvgMaxMin.查询“信息基础”的各项分数*/EXEC procGetAvgMaxMin  '信息基础'

5.创建带输出参数的存储过程

例   创建一个存储过程proc2,用于求指定数值的阶乘。    CREATE PROC proc2           @x int,           @Y int OUTPUT  /*声明变量y为输出参数*/    AS    /*声明两个局部变量i和t,并为其分别赋值为*/    DECLARE @i int,@t int    SELECT @i=l,@t=l    /*使用循环语句,计算x的阶乘t*/    WHILE @i<@x       BEGIN         SELECT @t=@t*t@i         SELECT @i=@i+l       END    /*将t的值,赋值给了输出参数y*/    SELECT @y=@t

6.创建有多条SQL语句的存储过程

例   创建一个存储过程proc3,能够查询特定课程的平均分、最高分和最低分,同时还能查询高于平均分的所有学生的信息。CREATE PROC proc3       @course_name char(20)ASDECLARE @avg_score int/*下面的语句用于查询显示平均分,最高分和最低分*/SELECT AVG(exam)  AS 平均分,       MAX(exam)  AS 最高分.       MINexam)   AS 最低分INNER JOIN course AS C      ON s.cno=c.cnoWHERE  c.cname=@course_name/*下面的语句用于将考试成绩平均分赋值给变量@avg_score*/SELECT   @avg_score =AVG(exam)FROM    score AS SINNER  JOIN course AS c       ON  s.cno=c.cnoWHERE  c.cname=@course_name/*下面的语句用于显示特定课程的分数高于平均分的学生信息*/SELECT  st.sno, st.sname, st.depart, s.exam, s.usuallyFROM    stu_info AS stINNER JOIN score AS s      ON   st.sno=s.snoINNER JOIN course AS c      ON s.cno=c.cnoWHERE  c.cname=@course_nameAND    s.exam>@avg_score

 

转载地址:http://cxgn.baihongyu.com/

你可能感兴趣的文章
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
mysql 敲错命令 想取消怎么办?
查看>>
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>