存储过程的定义和使用一、启动SQL查询分析器通过菜单[新建查询],启动SQL查询分析器。
系统将打开“连接到服务器”窗口⏹在服务器名称(指定SQL Server服务器)栏中,可选择需要连接的SQLServer服务器。
⏹在身份验证中,可选择登录SQL Server服务器的验证方式。
如果实验用机的SQL Server安装时设定了混合验证方式,则“SQL Server身份验证”方式可选。
选择该方式,其登录名默认为:sa,密码默认是:空。
点击按钮“确认”,SQL查询分析器将连接到指定的SQL Server服务器,并打开SQL查询分析器的界面SQL查询分析器的界面:SQL语句作用的当前数据库SQL语句输入窗口对象浏览窗口⏹左侧窗口是“对象浏览器”窗口;⏹右侧窗口是SQL语句的输入和调试窗口,可在该窗口中直接输入SQL语句或打开一个SQL脚本文件(后缀名为*.sql的文件);⏹上方的数据库列表显示了当前SQL语句作用的数据库。
二、创建数据库使用SQL语句创建实验数据库SCMIS,并创建3张表:STUDENT、COURSE和SC,输入数据。
以下内容均使用SQL语句在SQL查询分析器中执行运行。
(a)在SQL SERVER2012中,在查询分析器中使用T-SQL语句:CREATE DATABASE SCMISON (NAME='SCMIS',FILENAME='E:\SCMIS.MDF',SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=5%)LOG ON(NAME='SCMIS_Log',FILENAME='e:\SCMIS_Log.ldf',SIZE=2MB,MAXSIZE=5MB,FILEGROWTH=1MB)(b)在SQL SERVER中查询分析器的编辑窗口中用下列SQL语句:/* 建表 */use SCMISCREATE TABLE [dbo].[COURSE] ([CNO] [char] (2) PRIMARY KEY ,[CNAME] [varchar] (16) NOT NULL ,[CREDIT] [int] ,[C_TOTAL] [int] ,[CPNO] [char] (2)) ON [PRIMARY]GOCREATE TABLE [dbo].[STUDENT] ([SNO] [char] (5) PRIMARY KEY ,[SNAME] [char] (8) NOT NULL ,[SSEX] [char] (2) CONSTRAINT chkSsex CHECK(ssex IN ('男','女')) ,[SDEPT] [varchar] (10) ,[SMAJOR] [varchar] (10) ,[SAGE] [int] CONSTRAINT chkSage CHECK(sage>=16 and sage<=40) ,[NATIVE] [varchar] (30) ,[PHONE] [char] (7)) ON [PRIMARY]CREATE TABLE [dbo].[SC] ([SNO] [char] (5) NOT NULL ,[CNO] [char] (2) NOT NULL ,[SCORE] [int] ,CONSTRAINT pkSC PRIMARY KEY(sno,cno),FOREIGN KEY(sno) REFERENCES student(sno),FOREIGN KEY(cno) REFERENCES course(cno)) ON [PRIMARY]GO(c)在SQL SERVER中查询分析器的编辑窗口中使用下列SQL 语句插入数据:/* 数据输入 */INSERT INTO STUDENT(Sno,Sname,Ssex,Sage,Sdept,SMajor,Phone,Native)VALUES ('14001','李勇','男',20,'CS','软件工程',2681032,'福建')INSERT INTO STUDENT(Sno,Sname,Ssex,Sage,Sdept,SMajor,Phone,Native)VALUES ('14002','刘晨','女',19,'IS','信息管理',2682437,'福建')INSERT INTO STUDENT(Sno,Sname,Ssex,Sage,Sdept,SMajor,Phone,Native)VALUES ('14003','王名','女',18,'MA','计算数学',2680050,'山东')INSERT INTO STUDENT(Sno,Sname,Ssex,Sage,Sdept,SMajor,Phone,Native)VALUES ('14004','张立','男',19,'IS','电子商务',2681032,'湖北')INSERT INTO COURSE(Cno,Cname,Cpno,Credit,C_Total)VALUES ('C1','数据库','C5',3,3)INSERT INTO COURSE(Cno,Cname,Credit,C_Total)VALUES ('C2','数学',3,2)INSERT INTO COURSE(Cno,Cname,Cpno,Credit,C_Total)VALUES ('C3','信息系统','C1',4,2)INSERT INTO COURSE(Cno,Cname,Credit,C_Total)VALUES ('C4','操作系统',2,2)INSERT INTO COURSE(Cno,Cname,Cpno,Credit,C_Total)VALUES ('C5','数据结构','C6',3,1)INSERT INTO COURSE(Cno,Cname,Credit,C_Total)VALUES ('C6','C语言',2,1)INSERT INTO SC(Sno,Cno,Score)VALUES ('14001','C1',92)INSERT INTO SC(Sno,Cno,Score)VALUES ('14001','C2',85)INSERT INTO SC(Sno,Cno,Score)VALUES ('14001','C3',88)INSERT INTO SC(Sno,Cno,Score)VALUES ('14002','C2',90)INSERT INTO SC(Sno,Cno,Score)VALUES ('14002','C3',80)INSERT INTO SC(Sno,Cno,Score)VALUES ('14003','C1',76)INSERT INTO SC(Sno,Cno,Score)VALUES ('14003','C4',82)INSERT INTO SC(Sno,Cno,Score)VALUES ('14004','C5',75)INSERT INTO SC(Sno,Cno,Score)VALUES ('14004','C6',77)INSERT INTO SC(Sno,Cno,Score)VALUES ('14004','C1',55)GO三.存储过程的创建和使用1. 创建一个存储过程course_proc1,显示每门课程选修学生信息及其成绩。
方法一:使用Management Studio选择数据库SCMIS->可编程性->“存储过程”,在其上单击右键->选择“新建存储过程…”,打开“存储过程属性”对话框,输入存储过程正文。
方法二:在查询分析器中输入程序代码如下,然后运行。
USE SCMISGOCREATE PROC dbo.course_proc1ASSELECT S.Sname,S.Sdept,ame,SC.ScoreFROM Student S,Course C,SCWHERE S.Sno=SC.Sno AND o=oORDER BY ame DESCGO执行存储过程:用T-SQL语句方式,EXEC可省略。
EXEC course_proc12. 创建带默认参数的存储过程,查看指定系别的学生信息。
系别默认为“IS”。
USE SCMISGOCREATE PROC dbo.stu_proc1 @s_dep varchar(10)=’IS’ASSELECT * FROM Student WHERE sdept=@S_depGO执行存储过程的另一种方法:用界面方式。
右击要执行的存储过程stu_proc1,选择“执行存储过程…”命令,在弹出的【执行过程】窗口中,在【值】输入参数值:CS,点击“确定”。
该存储过程在调用时即使不指定参数值,也可以返回一个默认的结果。
小练习:该存储过程在调用时即使不指定参数值,也可以返回一个默认的结果。
试着不指定参数执行存储过程,观察运行结果。
练习:用T-SQL语句执行存储过程dbo.stu_proc1,查看’CS’系的学生信息。
3. 向sc表添加一条记录的存储过程sc_add:在查询分析器中输入程序代码如下,然后运行。
USE SCMISGOCREATE PROC sc_add(@ssno char(5),@ccno char(2),@sscore int)ASBEGININSERT INTO sc VALUES(@ssno,@ccno,@sscore)ENDRETURNGO4. 修改sc表中一条记录的存储过程sc_update:在查询分析器中输入程序代码如下,然后运行。