SQLSERVER存储过程基本语法

时间:2022-11-22 14:01:38
  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. 例:

数据:

SQLSERVER存储过程基本语法

存储过程:

SQLSERVER存储过程基本语法

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