huakaiyueluo

导航

sqlserver存储过程学习笔记(一)基础知识篇(全)

  说出来有点丢人,做sqlserver应用系统近一年,竟然没有使用过存储过程,现在就好好的梳理一下对应知识,慢慢让其加入到我的项目中去吧。

  存储过程的优点:1、运行效率高,提供了在服务器端快速执行sql语句的有效途径。2、存储过程降低了客户机和服务器之间的通信量。3、方便实施企业规则。

  (1)创建存储过程

  ①创建一个存储过程,查看00005号课程的选修情况,包括选修该课程学生的学号、姓名和成绩。

   解答:

              USE SM(数据库名称)

              GO

              CREATE PROCEDURE ssc_3

              AS

                   SELECT Student.SNo,SName,Score

                   FROM Student LEFT JOIN SC ON Student.SNo=SC.SNo

                   WHERE SC.SNo='00005'

                   GO

按F5键,创建成功

②执行存储过程:EXECUTE ssc_3

(2)使用输入参数

 ①上面建立的存储过程只能对00005号课程的选修情况进行查看,要想对所有课程进行随机查看,需要进行参数的传递

USE SM

GO

CREATE PROCEDURE ssc_4

@cnumber CHAR(5)

AS

 SELECT Student.SNo,SName,Score

 FROM Student LEFT JOIN SC ON Student.SNo=SC.SNo

 WHERE SC.SNo=@cnumber

GO

②按位置传递参数

EXECUTE ssc_4 '00008'

③通过参数名传递参数

EXECUTE ssc_4 

@cnumber='00008'

 (3)使用默认参数值

①执行存储过程ssc_4时,如果没有给出参数,系统会报错。如果希望不给参数时,能查询所有课程的选修情况,则可以使用默认参数来实现

 USE SM 

GO

CREATE PROCEDURE ssc_5

@cnumber CHAR(5) =NULL

AS 

IF  @cnumber IS NULL

BEGIN

SELECT Student.SNo,SName,Score

FROM Stuent JOIN SC ON Student.SNo=SC.SNo

END

ELSE

BEGIN

SELECT Student.SNo,SName,Score FROM Student JOIN SC ON Student.SNo=SC.SNo

WHERE SC.SNo=@cnumber

END

GO

②执行下面两条语句,比较执行结果。

EXECUTE ssc_5

EXECUTE ssc_5 '00005'

(4)使用输出参数

①创建一个存储过程ssc_6,获得选修某门课程的总人数

USE SM 

GO

CREATE PROCEDURE ssc_6

@cnumber CHAR(5),@ccount INT OUTPUT

AS 

SELECT @ccount=COUNT(*) FROM SC WHERE SC.CNo=@cnumber

GO

@执行存储过程ssc_6

DECLARE @ccount INT

EXECUTE ssc_6 '00008',@ccount OUTPUT

SELECT 'the result is',@ccount

(5)使用返回值

①创建一个返回执行状态码的存储过程ssc_7,它接受课程号为输入参数,如果执行成功,返回0;如果没有给出课程号,返回错误码1;如果给出的课程号不存在,返回错误码2;如果出现其他错误,返回错误码3.

USE SM

GO

CREATE PROCEDURE ssc_7

@cnumber CHAR(5) = NULL

AS

IF @cnumber IS NULL

BEGIN

    PRINT 'error:you must specify a course number.'

    RETURN(1)

    END

ELSE

BEGIN

    IF(SELECT COUNT(*) FROM SC WHERE CNo=@cumber)=0

    BEGIN

    PRINT 'error:you must specify a valid Course number'

    RETURN(2)

     END

END

SELECT @cnumber AS CNo FROM SC WHERE CNo=@cnumber 

IF @@error<>0

BEGIN 

RETURN(3)

END

ELSE

RETURN(0)

GO

执行存储过程ssc_7

DECLARE @result INT

EXEC @result ==ssc_7

SELECT 'the result is',@result

(6)修改存储过程(sqlserver 2008下)

在数据库根目录下,打开可编程选项下得存储过程选项,选择要修改的存储过程,右击鼠标,在弹出的对话框中选择修改即可

(7)查看存储过程。

  执行以下语句,查看存储过程ssc_3 的信息。

EXEC sp_help ssc_3

(8)删除存储过程

执行以下语句,删除存储过程ssc_3

DROP PROCEDURE ssc_3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2013-10-13 00:52  huakaiyueluo  阅读(687)  评论(0编辑  收藏  举报