本文共 3274 字,大约阅读时间需要 10 分钟。
-- Transact-SQL Syntax for Stored Procedures in SQL Server and Azure SQL DatabaseCREATE [ OR ALTER ] { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] [ { @parameter [ type_schema_name. ] data_type } [ VARYING ] [ = default ] [ OUT | OUTPUT | [READONLY] ] [ ,...n ][ WITH[ ,...n ] ][ FOR REPLICATION ]AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }[;] ::= [ ENCRYPTION ] [ RECOMPILE ] [ EXECUTE AS Clause ]
--创建存储过程CREATE PROC ProGetAuthorsASSELECT *FROM authorsgoEXEC progetauthors
语法格式。
[EXEC[UTE]] { [@return_status =] ( procedure_name [ ;number] I @procedure_name_ var } [[@parameter=] {value | @variable[OUTPUT] I [DEFAULT]] [,…n] [WITH RECOMPILE] 其中,大部分的参数与CREATE PROCEDURE的参数含义相同.例 在test数据库中创建—个名为procGetAvgMaxMin的存储过程.用于查询特定课程的考试成绩平均分、最高分和最低分。使用EXECUTE语句调用该存储过程查询“信息基础“的各项分数
CREATE PROC procGetAvgMaxMin @course_name char (20)ASSELECT AVG(exam) AS 平均分, MAX(exam) AS 最高分, MIN(exam) AS 最低分FROM score AS sINNER JOIN course AS c ON s.cno=c.cnoWHERE c.cname=@course_nameGO/*调用存储过程procGeCAvgMaxMin.查询“信息基础”的各项分数*/EXEC procGetAvgMaxMin '信息基础'
CREATE PROC procGetAvgMaxMin @course_name char (20)=NULLASIF @course_name IS NULL PRINT '请提供课程名称'ELSESELECT AVG(exam) AS 平均分, MAX(exam) AS 最高分, MIN(exam) AS 最低分FROM score AS sINNER JOIN course AS c ON s.cno=c.cnoWHERE c.cname=@course_nameGO/*调用存储过程procGeCAvgMaxMin.查询“信息基础”的各项分数*/EXEC procGetAvgMaxMin '信息基础'
例 创建一个存储过程proc2,用于求指定数值的阶乘。 CREATE PROC proc2 @x int, @Y int OUTPUT /*声明变量y为输出参数*/ AS /*声明两个局部变量i和t,并为其分别赋值为*/ DECLARE @i int,@t int SELECT @i=l,@t=l /*使用循环语句,计算x的阶乘t*/ WHILE @i<@x BEGIN SELECT @t=@t*t@i SELECT @i=@i+l END /*将t的值,赋值给了输出参数y*/ SELECT @y=@t
例 创建一个存储过程proc3,能够查询特定课程的平均分、最高分和最低分,同时还能查询高于平均分的所有学生的信息。CREATE PROC proc3 @course_name char(20)ASDECLARE @avg_score int/*下面的语句用于查询显示平均分,最高分和最低分*/SELECT AVG(exam) AS 平均分, MAX(exam) AS 最高分. MINexam) AS 最低分INNER JOIN course AS C ON s.cno=c.cnoWHERE c.cname=@course_name/*下面的语句用于将考试成绩平均分赋值给变量@avg_score*/SELECT @avg_score =AVG(exam)FROM score AS SINNER JOIN course AS c ON s.cno=c.cnoWHERE c.cname=@course_name/*下面的语句用于显示特定课程的分数高于平均分的学生信息*/SELECT st.sno, st.sname, st.depart, s.exam, s.usuallyFROM stu_info AS stINNER JOIN score AS s ON st.sno=s.snoINNER JOIN course AS c ON s.cno=c.cnoWHERE c.cname=@course_nameAND s.exam>@avg_score
转载地址:http://cxgn.baihongyu.com/