SQLSERVER存储过程基本语法
- 变量定义
- 语法:DECLARE @variable_name data_type [ , @variable_name data_type ... ]
- 说明:
- 变量定义的时候,变量名必须以@开头
- 以两个@开头的变量是全局变量,如@@FETCH_STATUS、@@VERSION等
- 变量赋值
- 语法:SELECT @variable_name = 值 或 SET @variable_name = 值
- 游标定义
- 语法:DECLARE cursor_name CURSOR FOR select_statement
- 说明:游标定义的时候,游标名不必以@开头
- 打开游标
- 语法:OPEN cursor_name
- 关闭游标
- 语法:CLOSE cursor_name
- 删除游标引用
- 语法:DEALLOCATE cursor_name
- 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 。
- NEXT:紧跟当前行返回结果行,并且当前行递增为返回行。如果
- 说明:根据全局变量@@FETCH_STATUS可判断上一个
FETCH
语句执行的状态。 -
返回值 描述 0 FETCH 语句成功。 -1 FETCH 语句失败或行不在结果集中。 -2 提取的行不存在。 -9 游标未执行提取操作。
- WHILE
- 语法:
- WHILE boolean_expression
- statement
- 说明:statement含多条语句时,必须以BEGIN 开头,END结尾。
- 语法:
- BREAK
- 语法:BREAK
- 说明:跳出循环时使用BREAK
- CONTINUE
- 语法:CONTINUE
- 说明:中止本次循环执行下一次循环时使用CONTINUE
- IF
- 语法:
- IF boolean_expression
- if_statement
- ELSE
- else_statement
- 说明:if_statement或else_statement含多条语句时,必须以BEGIN 开头,END结尾。
- 语法:
- GOTO & label
- 语法:
- GOTO label_name
- label_name:
- 语法:
- 创建带参数的存储过程
- 语法:
-
CREATE PROC[EDURE] procedure_name
@parameter_name date_type [ = default_value] [ OUTPUT ],
@parameter_name date_type [ = default_value] [ OUTPUT ],...
AS
BEGINstatements
END
-
- 语法:
- 执行存储过程
- EXECUTE/EXEC procedure_name [@parameter_name [OUTPUT] [ , @parameter_name [OUTPUT]... ]]
- 说明:
- @parameter_name是传入存储过程的对应参数的值
- 如果要执行的存储过程的参数带OUTPUT,则执行语句中对应参数也要带OUTPUT
- 如果要执行的存储过程的参数设置了默认值
- 如果是最后一个参数设置了默认值,且该参数以默认值执行,则执行语句中可省略该参数的传值
- 如果不是最后一个参数设置了默认值,且该参数以默认值执行,则执行语句中可用DEFAULT代替该参数的传值
- 删除存储过程
- 语法:DROP PROCEDURE procedure_name
- 创建带参数的方法
- 语法:
-
CREATE FUNCTION function_name
(@parameter_name date_type [ = default_value],
@parameter_name date_type [ = default_value],...)
RETURN return_type AS
BEGINstatements
END
-
- 说明:方法的参数不能设置为OUTPUT
- 语法:
- 调用方法
- SELECT 或 INSERT 语句中可调用方法
- 必须指定方法的所有者
- 例:SELECT dbo.func_test(1,2)
- 如果要调用的方法的参数设置了默认值
- 如果是最后一个参数设置了默认值,且该参数以默认值执行,则执行语句中可省略该参数的传值
- 如果不是最后一个参数设置了默认值,且该参数以默认值执行,则执行语句中可用DEFAULT代替该参数的传值
- 删除方法
- 语法:DROP FUNCTION function_name
- RAISEERROR
- 语法:RAISEERROR ( msg, severity, state, argument [ , argument ... ] )
- 说明:
- msg:消息字符串或消息ID
- severity:重要度(0~18任意用户可使用,19~25只有sysadmin的用户可使用)
- state:状态(1~127)
- argument:替换msg中变量(如%d、%s等)
- 例:
数据:
存储过程:
声明:本文是本人查阅网上及书籍等各种资料,再加上自己的实际测试总结而来,仅供学习交流用,请勿使用于商业用途,任何由此产生的法律版权问题概不负责,谢谢。