定义存储过程的语法
q
q
q
①
CREATE
AS
SELECT
FROM
WHERE s.sno=sc.sno andc.cno=sc.cno
ORDER BYs.sno
GO
相当于:SELECT
FROM
WHERE s.sno=sc.sno andc.cno=sc.cno
ORDER BYs.sno
②
CREATE
@snamevarchar(20)
AS
SELECT
FROM
WHERE s.sno=sc.sno andc.cno=sc.cno
and sname=@sname
GO
这样执行存储过程的语句时候就要添加参数:
Exec stusc
③
CREATE
@sname varchar(20) ,@sgrade int
output
AS
SELECT @sgrade = sum(grade)
FROM
WHEREstudent.sno=sc.sno
andsname=@sname
GO
go
创建有返回值的存储过程:
(1)简单的返回值,只有已知的0或者1
CREATE PROCEDURE find
AS
IF EXISTS(SELECT * FROM tb_authorinfo WHEREauthname = @auName)
ELSE
GO
DECLARE @Resultint
EXECUTE @Result = find
IF (@Result=1)
ELSE
PRINT '查无此人'
GO
(2)以上的返回值是简单的0和1,可以不用在存储过程中定义返回值作为变量,然而下面这个就要:
建立一个名为ScroeProc的存储过程,它带有一个输入参数和两个输出参数和一个返回值。
输入参数:@Cname,接收课程名。
输出参数:@Avg接受平均分;@Max接受最高分。
返回值:局部变量@ErrorSave 存放错误号。
(系统函数@@ERROR:如果上一个Transact-SQL语句执行成功,@@ERROR 系统函数将返回 0;如果该语句生成错误,@@ERROR 将返回错误号)
Create proc ScroeProc @Cnamevarchar(20),@Avg decimal output,@Max decimal output
As
Declare @ErrorSave int
Set@ErrorSave=0
Select
where
having 课程=@cname
If(@@ERROR<>0)
SET @ErrorSave=@@ERROR
SELECT @Max=Max(成绩)
IF (@@ERROR<>0)
RETURN @ErrorSave
GO
调用存储过程:
DECLARE
@AvgGrade decimal ,@MaxGradedecimal
EXEC @RetCode =ScroeProc
select @RetCode,@AvgGrade,@MaxGrade
GO