• SQLSERVER存储过程基本语法


    1. 变量定义
      • 语法:DECLARE @variable_name data_type [ , @variable_name data_type ... ]
      • 说明:
        • 变量定义的时候,变量名必须以@开头
        • 以两个@开头的变量是全局变量,如@@FETCH_STATUS、@@VERSION等
    2. 变量赋值
      • 语法:SELECT @variable_name = 值 或 SET @variable_name = 值
    3. 游标定义
      • 语法:DECLARE cursor_name CURSOR FOR select_statement
      • 说明:游标定义的时候,游标名不必以@开头
    4. 打开游标
      • 语法:OPEN cursor_name
    5. 关闭游标
      • 语法:CLOSE cursor_name
    6. 删除游标引用
      • 语法:DEALLOCATE cursor_name
    7. FETCH
      • 语法:FETCH [ command ] FROM cursor_name [ INTO @variable_name [ , @variable_name ] ]
      • command:NEXT、PRIOR、FIRST、LAST、ABSOLUTE n、RELATIVE n
        • NEXT:紧跟当前行返回结果行,并且当前行递增为返回行。如果 FETCH NEXT 为对游标的第一次提取操作,则返回结果集中的第一行。 NEXT 为默认的游标提取选项。
        • PRIOR:返回紧邻当前行前面的结果行,并且当前行递减为返回行。如果 FETCH PRIOR 为对游标的第一次提取操作,则没有行返回并且游标置于第一行之前。
        • FIRST:返回游标中的第一行并将其作为当前行。
        • LAST:返回游标中的最后一行并将其作为当前行。
        • ABSOLUTE n:如果 n 或 @nvar 为正,则返回从游标起始处开始向后的第 n 行,并将返回行变成新的当前行 。 如果 n 或 @nvar 为负,则返回从游标末尾处开始向前的第 n 行,并将返回行变成新的当前行 。 如果 n 或 @nvar 为 0,则不返回行 。 n 必须是整数常量,并且 @nvar 必须是 smallint、tinyint 或 int 。
        • RELATIVE n:如果 n 或 @nvar 为正,则返回从当前行开始向后的第 n 行,并将返回行变成新的当前行 。 如果 n 或 @nvar 为负,则返回从当前行开始向前的第 n 行,并将返回行变成新的当前行 。 如果 n 或 @nvar 为 0,则返回当前行 。 在对游标进行第一次提取时,如果在将 n 或 @nvar 设置为负数或 0 的情况下指定 FETCH RELATIVE,则不返回行 。 n 必须是整数常量,并且 @nvar 必须是 smallint、tinyint 或 int 。
      • 说明:根据全局变量@@FETCH_STATUS可判断上一个 FETCH 语句执行的状态。
      • 返回值描述
         0 FETCH 语句成功。
        -1 FETCH 语句失败或行不在结果集中。
        -2 提取的行不存在。
        -9 游标未执行提取操作。
    8. WHILE
      • 语法:
        • WHILE boolean_expression
        • statement
      • 说明:statement含多条语句时,必须以BEGIN 开头,END结尾。
    9. BREAK
      • 语法:BREAK
      • 说明:跳出循环时使用BREAK
    10. CONTINUE
      • 语法:CONTINUE
      • 说明:中止本次循环执行下一次循环时使用CONTINUE
    11. IF
      • 语法:
        • IF boolean_expression
        • if_statement
        • ELSE
        • else_statement
      • 说明:if_statement或else_statement含多条语句时,必须以BEGIN 开头,END结尾。
    12. GOTO & label
      • 语法:
        • GOTO label_name
        • label_name:
    13. 创建带参数的存储过程
      • 语法:
        • CREATE PROC[EDURE] procedure_name 

           @parameter_name date_type [ = default_value] [ OUTPUT ],
           @parameter_name date_type [ = default_value] [ OUTPUT ],
           ...
          AS
          BEGIN
              statements 
          END
    14. 执行存储过程
      • EXECUTE/EXEC procedure_name [@parameter_name [OUTPUT] [ , @parameter_name [OUTPUT]... ]]
      • 说明:
        • @parameter_name是传入存储过程的对应参数的值
        • 如果要执行的存储过程的参数带OUTPUT,则执行语句中对应参数也要带OUTPUT
        • 如果要执行的存储过程的参数设置了默认值
          • 如果是最后一个参数设置了默认值,且该参数以默认值执行,则执行语句中可省略该参数的传值
          • 如果不是最后一个参数设置了默认值,且该参数以默认值执行,则执行语句中可用DEFAULT代替该参数的传值
    15. 删除存储过程
      • 语法:DROP PROCEDURE procedure_name
    16. 创建带参数的方法
      • 语法:
        • CREATE FUNCTION function_name 

           (@parameter_name date_type [ = default_value],
           @parameter_name date_type [ = default_value],
           ...)
          RETURN return_type AS
          BEGIN
              statements 
          END
      • 说明:方法的参数不能设置为OUTPUT
    17. 调用方法
      • SELECT 或 INSERT 语句中可调用方法
      • 必须指定方法的所有者
      • 例:SELECT dbo.func_test(1,2)
      • 如果要调用的方法的参数设置了默认值
        • 如果是最后一个参数设置了默认值,且该参数以默认值执行,则执行语句中可省略该参数的传值
        • 如果不是最后一个参数设置了默认值,且该参数以默认值执行,则执行语句中可用DEFAULT代替该参数的传值
    18. 删除方法
      • 语法:DROP FUNCTION function_name
    19. RAISEERROR
      • 语法:RAISEERROR ( msg, severity, state, argument [ , argument ... ] )
      • 说明:
        • msg:消息字符串或消息ID
        • severity:重要度(0~18任意用户可使用,19~25只有sysadmin的用户可使用)
        • state:状态(1~127)
        • argument:替换msg中变量(如%d、%s等)
    20. 例:

    数据:

    存储过程:

    声明:本文是本人查阅网上及书籍等各种资料,再加上自己的实际测试总结而来,仅供学习交流用,请勿使用于商业用途,任何由此产生的法律版权问题概不负责,谢谢。

  • 相关阅读:
    php无限极分类
    HDU 1176 免费馅饼 (类似数字三角形的题,很经典,值得仔细理解的dp思维)
    HDU 1158(非常好的锻炼DP思维的题目,非常经典)
    HDU 1165 公式推导题
    HDU 1069 Monkey and Banana(转换成LIS,做法很值得学习)
    HDU 1059(多重背包加二进制优化)
    HDU 1058(打表)
    oracle11g之管理oracle数据库笔记(理论基础知识)
    oracle11g之Oracle体系结构(理论基础知识)
    HDU 1025 LIS二分优化
  • 原文地址:https://www.cnblogs.com/feiyu721/p/11264097.html
Copyright © 2020-2023  润新知