想成功必须强大 发表于 2019-8-29 14:49:31

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 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 [ , @parameter_name ... ]]
说明:
@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.例:
数据:

存储过程:
页: [1]
查看完整版本: SQLSERVER存储过程基本语法