实验六 SQL Server中的存储过程及应用

实验六 SQL Server中的存储过程及应用
实验六 SQL Server中的存储过程及应用

实验报告

2011 – 2012 学年第 2 学期任课老师:

课程名称数据库系统原理班级座号姓名

实验六 SQL Server中

实验时间

实验题目

的存储过程及应用

实验目的、要求

1)掌握存储过程的创建与执行。

2)熟悉存储过程与批处理的区别。

3)掌握带参数的存储过程的创建与执行。

实验设计内容

二、实验内容及步骤

1)在Sql Server中新建查询,粘贴“实验6.sql”并执行。

2)创建一个存储过程,要求查询所有学生的详细信息。

3)创建一个存储过程,要求查询每位学生所选课程的平均成绩

4)创建一个存储过程,要求查询每位学生所选课程的最高成绩

5)创建一个存储过程,要求查询每位学生所选课程的最高成绩以及所对应的课程名称。

6)创建一个存储过程,要求查询制定学号的学生详细信息。

7)创建一个存储过程,要求查询所选课程成绩不合格的学生详细信息。

8)创建一个存储过程,要求向XSQK表插入一条学生记录。

9)创建一个存储过程,要求能够实现输出制定学生所选课程的平均分、最高分和最低分。

10)创建一个存储过程,要求能够实现对输入的两个数求和,并将结果输出。

11)创建一个存储过程,要求能够实现将两个字符串连接成一个字符串,并将结果输出。

总结以及心得体会

通过这次实验,让我深刻了解了数据库的功能,觉得它功能非常的强大,掌握存储过程的创建与执行,熟悉存储过程与批处理的区别。掌握带参数的存储过程的创建与执行.

指导老师评阅意见

指导老师:年月日

填写内容时,可把表格扩大。实验的源程序代码(要有注释)附在表后。

实验六 存储过程和触发器

实验六存储过程和触发器(2学时) 1.实验目的 (1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。 (2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。 (3)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER创建触发器的方法和步骤。 (4)掌握引发触发器的方法。 (5)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。 2.实验内容 (1)输入以下T-SQL代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示26个小写字母。 CREATE PROCEDURE letters_print AS DECLARE @count int SET @count=0 WHILE @count<26 BEGIN PRINT CHAR(ASCII('a')+ @count) SET @count=@count +1 END 使用EXECUTE命令执行letters_print存储过程。 (2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。 CREATE PROCEDURE stu_info @name varchar(40) AS SELECT a.no,name,cno,grade FROM Student a INNER JOIN grade b ON a.no= b.sno WHERE name= @name 使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。 如果存储过程stu_info执行时没有提供参数,要求能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义? (3)使用student_db数据库中的Student表、course表、grade表。 ①创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、

存储过程的典型例子

可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等。其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高。 QUOTE: SQL SERVER 联机丛书中的定义: 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 也可以创建在 Microsoft SQL Server 启动时自动运行的存储过程。 要使用存储过程,首先我们必需熟悉一些基本的T-SQL语句,因为存储过程是由于一组T-SQL语句构成的,并且,我们需要了解一些关于函数、过程的概念,因为我们需要在应用程序中调用存储过程,就像我们调用应用程序的函数一样,不过调用的方法有些不同。 下面我们来看一下存储过程的建立和使用方法。 一、创建存储过程 和数据表一样,在使用之前我们需要创建存储过程,它的简明语法是: QUOTE: CREATE PROC 存储过程名称 [参数列表(多个以“,”分隔)] AS SQL 语句 例: QUOTE: CREATE PROC upGetUserName @intUserId INT, @ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数 AS BEGIN -- 将uName的值赋给 @ostrUserName 变量,即要输出的参数 SELECT @ostrUserName=uName FROM uUser WHERE uId=@intUserId END 其中 CREATE PROC 语句(完整语句为CREATE PROCEDURE)的意思就是告诉SQL SERVER,

SQL存储过程实例

题目1 1、学校图书馆借书信息管理系统建立三个表: 学生信息表:student 图书表:book 借书信息表:borrow 请编写SQL语句完成以下的功能: 1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、 学生名称、图书编号、图书名称、借出日期;参考查询结果如下图所示: 2)查询所有借过图书的学生编号、学生名称、专业;参考查询结果如下图所示:

3)查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期; 参考查询结果如下图所示: 4)查询目前借书但未归还图书的学生名称及未还图书数量;参考查询结果如下图所 示: 附加:建表语句:

标准答案:

题目2 程序员工资表:ProWage 创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱? 例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:

请编写T-SQL来实现如下功能: 1)创建存储过程,查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000 元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。 2)创建存储过程,查询程序员平均工资在4500元,如果不到则每个程序员每次加200元, 至到所有程序员平均工资达到4500元。 建表语句

实验六 MySql存储过程

实验六MySql存储过程 一、实验目的 1、熟悉MySql的存储过程 二、实验内容 1、建立一张学生表,属性有学号、姓名、年龄三个字段。 2、建立一个存储过程,实现学生的全查询 3、分别用IN 和OUT实现姓名的调用 4、声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。 5、建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生. 6、建立一个存储过程,做一个循环语句,循环插入5个学生。(至少用三种循环的存储过程方法) 三、试验结果截图 1.建立一张学生表,属性有学号、姓名、年龄三个字段。 2.建立一个存储过程,实现学生的全查询

3.分别用IN 和OUT实现姓名的调用 4.声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。

5.建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.

6建立一个存储过程,做一个循环语句,循环插入5个学生。(至少用三种循环的存储过程方法) 所有代码: 1. create table stu( stuno int, stuna varchar(20), stuage int ); insert into stu values(001,'zhangsan',22);

insert into stu values(002,'lisi',23); insert into stu values(003,'wangwu',23); insert into stu values(004,'maliu',24); insert into stu values(005,'zhaoqi',25); insert into stu values(006,'gaoba',23); insert into stu values(007,'ddddd',22); insert into stu values(008,'ttttt',21); 2. create procedure select_all() select * from stu; 3. delimiter // create procedure searchno( in no int, out na varchar(20), out age int ) begin select stuna from stu where stuno=no into na; select stuage from stu where stuno=no into age; end // delimiter ; call searchno(n,@na,@age); select @na,@age; 4. delimiter // create procedure noupdate( in n int) begin update stu set stuno=stuno+n; end // delimiter ; 5. delimiter // create procedure addstu( in sno int ) begin case sno when 0 then insert into stu values(17,'no17',20); when 1 then insert into stu values(18,'no18',20); else insert into stu values(19,'no19',20); end case; end //

sql server存储过程详细代码(超赞!)

use jxgl --首先判断有没有已经建立up_getallstudents存储过程,有则先删除 if exists (select name from sysobjects where name='up_getallstudents'and type ='p') drop procedure up_getallstudents --编写存储过程up_getallstudents,用于获取学生表students的所有记录 create procedure up_getallstudents as select*from students --使用execute执行存储过程up_getallstudents exec up_getallstudents --也可写成 execute up_getallstudents --编写一个存储过程up_insertstudent,完成学生表students数据的插入 --1、不带默认值的参数 create procedure up_insertstudent @sid varchar(15),@sname varchar(30),@ssex char(10), @sbirth datetime,@sbirthplace varchar(300) as begin insert into students (stu_id,stu_name,stu_sex,stu_birth,stu_birthplace) values (@sid,@sname,@ssex,@sbirth,@sbirthplace) end exec up_insertstudent'200712110111','肖玉峰','男','1975-02-05','山东省滕州市木石镇' --等同于 exec up_insertstudent @sname='肖玉峰',@sid='200712110111',@ssex='男',@sbirth= '1975-02-05',@sbirthplace='山东省滕州市木石镇' drop procedure up_insertstudent delete students where stu_name='肖玉峰'

数据库实验报告六_存储过程

HUNAN UNIVERSITY 数据库 实验报告 学生姓名 学生学号 专业班级 指导老师 2017 年5月24日

SELECT COUNT(*)INTO more90 FROM sc WHERE cno = countcno AND grade >= 90; /*将结果存入新表sumScore中*/ create table sumScore( scorestage char(10), number smallint); insert into sumScore values('x<60', less60); insert into sumScore values('60<=x<70', b60a70); insert into sumScore values('70<=x<80', b70a80); insert into sumScore values('80<=x<90', b80a90); insert into sumScore values('x>=90', more90); END$$ call sumScore(); /*调用上述存储过程*/ 首先创建存储过程,然后再调用存储过程。结果如下: (上述结果图截自Navicat软件) 可以看到,在stuinfo中新建了一个基本表sumscore,表中内容是数学课程成绩的各分数段的人数。 2、统计任意一门课的平均成绩。 代码如下: DELIMITER $$ CREATE PROCEDURE `scoreAvg`() BEGIN declare curname char(40) default null; /*临时存放课程名*/ declare curcno char(4) default null; /*临时存放课程号*/ declare curavg float; /*临时存放平均成绩*/ declare mycursor cursor for /*定义游标*/ select cno, cname from course;

(Oracle管理)SQL中调用ORACLE存储过程

SQL Server 调用Oracle的存储过程收藏 原文如下: 通过SQL Linked Server 执行Oracle 存储过程小结 1 举例 我们可以通过下面的方法在SQL Server中通过Linked Server 来执行Oracle 存储过程。 (1) Oracle Package PACKAGE Test_PACKAGE AS TYPE t_t is TABLE of VARCHAR2(30) INDEX BY BINARY_INTEGER; PROCEDURE Test_procedure1 ( p_BATCH_ID IN VARCHAR2, p_Number IN number, p_MSG OUT t_t, p_MSG1 OUT t_t ); END Test_PACKAGE; PACKAGE BODY Test_PACKAGE AS PROCEDURE Test_procedure1 ( p_BATCH_ID IN VARCHAR2, p_Number IN number, p_MSG OUT t_t, p_MSG1 OUT t_t ) AS BEGIN p_MSG(1):='c'; p_MSG(2):='b'; p_MSG(3):='a';

p_MSG1(1):='abc'; RETURN; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; END Test_procedure1; END Test_PACKAGE; (2) 在SQL Server中通过Linked Server 来执行Oracle 存储过程 declare @BatchID nvarchar (40) declare @QueryStr nvarchar (1024) declare @StatusCode nvarchar(100) declare @sql nvarchar(1024) set @BatchID='AAA' SET @QueryStr='{CALL GSN. Test_PACKAGE.Test_procedure1('''''+@BatchID +''''',''''4'''',{resultset 3, p_MSG},{resultset 1, p_MSG1})}' (3)执行结果 (a) select @sql='SELECT @StatusCode=p_msg FROM OPENQUERY (HI4DB_MS,'' '+@QueryStr+''')' exec sp_executesql @sql,N'@StatusCode nvarchar(100) output',@StatusCod e output print @StatusCode 答案:@StatusCode=’a’ (b) select @sql='SELECT top 3 @StatusCode=p_msg FROM OPENQUERY (HI4DB

实验6 存储过程创建与应用

学院:信息工程学院 专业:计算机科学与技术姓名:蔡启林 学号:201013432

实验六存储过程创建与应用 一、实验目的 使学生理解存储过程的概念,掌握创建存储过程的使用、执行存储过程和查看、修改、删除存储过程的方法。 二、实验内容 (1)利用企业管理器创建存储过程student_grade,要求实现如下功能:查询“学生-课程”数据库中每个学生各门功课的成绩,其中包括每个学生的sno,sname,cname,grade。 (2)利用查询分析器创建名为proc_exp的存储过程,要求实现如下功能:从sc表中查询某一学生考试平均成绩。 (3)修改存储过程proc_exp,要求实现如下功能:输入学生学号,根据该学生所选课程的平均成绩显示提示信息,即如果平均成绩在60分以上,显示“此学生综合成绩合格,成绩为XX分”,否则显示“此学生总和成绩不合格,成绩为XX分”。 (4)创建名为proc_add的存储过程,要求实现如下功能:向sc表中添加学生成绩记录。调用proc_add,向sc表中添加学生成绩记录。 (5)调用存储过程proc_exp,输入学生学号,显示学生综合成绩是否合格。 (6)删除刚刚创建的proc_add和proc_exp两个存储过程。 三、实验过程 要求个人填写(要求有文字描述和适当的图片辅助说明) (1)

查询执行结果为: (2) 查询执行结果为:

(3) 查询执行结果为: (4)

查询执行结果为: (5)

(6) 四、实验总结 要求个人填写(实验中发现的问题和解决的办法) 通过这次试验我更加深刻的理解了存储过程的概念,SQL Sever中的存储过程与其他编程语言中的函数类似,就像是函数的调用,包含执行各种数据库操作的语句,并且可以调用其他的存储过程,接受输入参数并以输出参数的格式向调用过程或批处理返回多个值,向调用过程或批处理返回状态值,以指明成功或失败,把实现一些功能的语句封装起来,需要使用的时候进行调用,效率很高使用起来方便。创建存储过程有一定的设计规则,实验课中涉及的规则比较少,比较简单,有些复杂的规则还需在练习中遇到问题才能认识到。存储过程的相关语句有创建create procedure,修改alter procedure,执行execute,删除drop procedure等等,大体的框架掌握了之后,主要就是写T-SQL语句以实现相应的功能。在创建的时候要注意输入和输出参数,我在定义的时候忘记了out导致错误。仔细检查改过错误后就解决了这个问题,这次实验让我了解了使用存储过程的好处,让我再以后的数据库学习中更好的熟练掌握这门课。

SQL存储过程使用方法.

SQL存储过程使用方法所有的大型数据库都支持存储过程,比如Oracle、MS SQL等,(但MS Access不支持,不过,在Access里可以使用参数化的查询)。存储过程是利用SQL Server所提供的Tranact-SQL语言所编写的程序。Tranact-SQL语言是SQL Server提供专为设计数据库应用程序的语言,它是应用程序和SQL Server数据库间的主要程序式设计界面。它好比Oracle数据库系统中的Pro-SQL和Informix的数据库系统能够中的Informix-4GL语言一样。这类语言主要提供以下功能,让用户可以设计出符合引用需求的程序: 1、变量说明 2、ANSI兼容的SQL命令(如Select,Update…. 3、一般流程控制命令(if…else…、while…. 4、内部函数存储过程的书写格 CREATE PROCEDURE [拥有者.]存储过程名[;程序编号] [(参数#1,…参数#1024] [WITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION} ] [FOR REPLICATION] AS 程序行其中存储过程名不能超过128 个字。每个存储过程中最多设定1024个参数(SQL Server 7.0以上版本,参数的使用方法如下: @参数名数据类型 [VARYING] [=内定值] [OUTPUT] 每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE 外,其他SQL Server所支持的数据类型都可使用。 [=内定值]相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数,同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。 CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS SELECT @p_tot = sum(Unitprice*Quantity FROM orderdetails WHERE ordered=@o_id 该例子是建立一个简单的存储过程order_tot_amt,这个存储过程根据用户输入的定单ID号码(@o_id,由定单明细表(orderdetails中计算该定单销售总额[单价(Unitprice*数量(Quantity],这一金额通过@p_tot这一参数输出给调用这一存储过程的程序使用存储过程有许多好处,它可以封装复杂的数据逻辑,充分发挥大型数据库本身的优势。我们知道,ASP并不适合做复杂的数据运算,而通过OLD DB访问数据库,由于数据需要在ASP和数据库之间传递,相当消耗系统资源。事实上,如果数据库仅仅起着

6实验六 存储过程

实验六存储过程 一、实验目的 (1)掌握T-SQL流控制语句。 (2)掌握创建存储过程的方法。 (3)掌握存储过程的执行方法。 (4)掌握存储过程的管理和维护。 二、实验内容 1、创建简单存储过程 (1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。 if exists(select*from sysobjects where name='stu_pr'and type='P') begin drop procedure stu_pr print'已删除!' end else print'不存在,可创建!' create procedure stu_pr as select distinct*from Student s left join SC on s.Sno=SC.Sno left join Course c on https://www.360docs.net/doc/921295891.html,o=https://www.360docs.net/doc/921295891.html,o where Classno='051'

执行: exec stu_pr 2、创建带参数的存储过程 (1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。执行该存储过程,用多种参数加以测试。 if exists(select*from sysobjects where name='stu_proc1'and type='P') begin drop procedure stu_proc1 print'已删除!' end else print'不存在,可创建!'

实验6 数据库实验——存储过程和触发器

实验6 存储过程与触发器 一、实验目的 1、加深与巩固对存储过程与触发器概念的理解。 2、掌握触发器的简单应用。 3、掌握存储过程的简单应用。 二、实验内容 一)存储过程: 1、创建一存储过程,求l+2+3+…+n,并打印结果。 CREATE PROCEDURE addresult AS DECLARE @n int=10,/*最后一个数*/ @i int=0, @result int=0 /*结果*/ BEGIN WHILE(@i<=@n) BEGIN SET @result=@result+@i SET @i=@i+1 END PRINT'1+2+3+、、、+n的结果就是:' PRINT @result RETURN(@result) END GO 2.调用上面的addresult存储过程,打印l十2+3+…+10的结果。EXEC addresult

3、修改上述存储过程为addresult1,使得@n为输入参数,其具体值由用户调用此存储过程时指定。 CREATE PROCEDURE addresult1 @n int=10 /*最后一个数*/ AS DECLARE @i int=0, @result int=0 /*结果*/ BEGIN WHILE(@i<=@n) BEGIN SET @result=@result+@i SET @i=@i+1 END PRINT'1+2+3+、、、+n的结果就是:' PRINT @result RETURN(@result) END GO 4、调用上面修改后的addresult1存储过程,打印l+2+3+…+100的结果。 EXEC addresult1 100 5.修改上述存储过程为addresult2,将@n参数设定默认值为10,并改设@sum为输出参数,让主程序能够接收计算结果。

(完整版)SQLSERVER存储过程大总结

SQLSERVER存储过程使用说明书 引言 首先介绍一下什么是存储过程:存储过程就是将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,并且这样的语句是放在数据库中的,还可以根据条件执行不同SQL语句,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 请大家先看一个小例子: create proc query_book as select * from book go --调用存储过程 exec query_book 请大家来了解一下存储过程的语法。 Create PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] 一、参数简介 1、procedure_name 新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。 要创建局部临时过程,可以在 procedure_name 前面加一个编号 符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两

个编号符 (##procedure_name)。完整的名称(包括 # 或 ##)不能超过 128 个字符。指定过程所有者的名称是可选的。 2、;number 是可选的整数,用来对同名的过程分组,以便用一条 Drop PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。Drop PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应 在 procedure_name 前后使用适当的定界符。 3、@parameter 过程中的参数。在 Create PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2100 个参数。 使用@符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。 4、data_type 参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。 说明:对于可以是cursor 数据类型的输出参数,没有最大数目的限制。 5、VARYING 指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。 6、default 参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。 7、OUTPUT

实验六 存储过程和触发器

实验六存储过程和触发器 电子信息科学与技术罗滨志(120802010051) 一、实验目的 (1)理解存储过程和触发器的功能和特点; (2)学会使用Transact-SQL编写存储过程和触发器的方法; (3)学会如何使用管理平台创建存储过程和触发器; (4)掌握存储过程的创建、执行与删除; (5)掌握触发器的创建、修改和删除操作; (6)理解可以使用存储过程和触发器来维护数据完整性。 二、实验准备 (1)了解存储过程的基本概念和类型。 (2)了解创建存储过程的Transact —SQL语句的基本语法。 (3)了解查看、执行、修改和删除存储过程的基本语法。 (4)了解触发器的基本概念和类型。 (5)了解创建触发器的Transact —SQL语句基本用法。 (6)了解查看、修改和删除触发器的Transact —SQL语句的用法。 三、实验内容和步骤 1.创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。SQL语句 create proc stu_info@sname varchar(20) as select grade from sc,student where student.sno=sc.sno and sname=@sname go 如图所示:

2. 使用studentsdb数据库中的student表,course表、sc表。 (1)创建一个存储过程stu_score,查询学号为2012001的学生的姓名,课程名称,分数。SQL语句 create proc stu_score@sno varchar(20) as select sname,cname,grade from sc,student,course where student.sno=sc.sno and https://www.360docs.net/doc/921295891.html,o=https://www.360docs.net/doc/921295891.html,o and student.sno=@sno go 如图所示:

SQL Server存储过程的基本概念以及语法

SQL Server存储过程的基本概念以及语法【转】 存储过程的概念 SQL Server提供了一种方法,它可以将一些固定的操作集中起来由SQL Server数据库服务器来完成,以实现某个任务,这种方法就是存储过程。 存储过程是SQL语句和可选控制流语句的预编译集合,存储在数据库中,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其他强大的编程功能。 在SQL Server中存储过程分为两类:即系统提供的存储过程和用户自定义的存储过程。 可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点: 可以在单个存储过程中执行一系列SQL语句。 可以从自己的存储过程内引用其他存储过程,这可以简化一系列复杂语句。 存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快,而且减少网络通信的负担。 安全性更高。 创建存储过程 在SQL Server中,可以使用三种方法创建存储过程: ①使用创建存储过程向导创建存储过程。 ②利用SQL Server 企业管理器创建存储过程。 ③使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程。 下面介绍使用Transact-SQL语句中的CREATE PROCEDURE命令创建存储过程 创建存储过程前,应该考虑下列几个事项: ①不能将 CREATE PROCEDURE 语句与其它 SQL 语句组合到单个批处理中。 ②存储过程可以嵌套使用,嵌套的最大深度不能超过32层。 ③创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。 ④存储过程是数据库对象,其名称必须遵守标识符规则。 ⑤只能在当前数据库中创建存储过程。 ⑥ 一个存储过程的最大尺寸为128M。 使用CREATE PROCEDURE创建存储过程的语法形式如下: QUOTE: CREATE PROC[EDURE]procedure_name[;number][;number] [{@parameter data_type}[VARYING][=default][OUTPUT]][,...n] WITH {RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]

C++调用SQL存储过程实例

c/c++调用mysql存储过程 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出。6.0不仅支持大型数据库如oracle等的绝大部分功能,如存储过程、视图、触发器、job等等,而且修正了这些功能所存在的bug,其中6.0.1还支持64位windows,以及表空间。 在c/c++中访问mysql,常见的只是一些简单的业务,使用c中嵌入简单的查询、插入、更新等操作即可。随着业务的复杂化,完成一个业务功能需要非常多的sql操作环节,把这些语句都嵌入c代码中会导致c代码越来越繁琐、不清晰,这时候,自然就想到了存储过程来封装所有的数据库逻辑,通过c简单调用mysql存储过程接口即可达到目的,极大地减轻了c程序员的工作量,也便于前端业务处理逻辑与数据库处理逻辑的分离。下面就介绍c 语言调用存储过程的简单的方法。 1、首先创建一张表 用于存放用户信息 Create table student( id int auto_increment, name varchar(20), age tinyint, remark varchar(50), primary key(id) ); 2、插入几条信息 Insert into student values(1,"zhouys",90, ""); commit; 3、查看用户信息 mysql> select * from student;

+------+-----------+------+----------+ | id | name | age | remark | +------+-----------+------+----------+ | 1 | zhouys | 90 | | +------+-----------+------+-----------+ 1 row in set (0.00 sec) mysql> 4、创建存储过程 如下: delimiter // create procedure querystudent( in in_id int , #0-字符id 1-数字id # out out_ret int, #返回结果 out out_name varchar(20), #名字 out out_age int #年龄) label_a:begin declare v_name varchar(20) ; declare v_age tinyint ; #参数判断 if (in_id<=0) then set out_ret=-1; #id error

实验六 存储过程和触发器

实验六存储过程与触发器 一、目的与要求 1.掌握编写数据库存储过程的方法。 2.掌握建立数据库触发器的方法,通过实验观察触发器的作用与触发条件设置 等相关操作。 二、实验准备 1.了解编写存储过程与调用的T-SQL语法; 2.了解触发器的作用; 3.了解编写触发器的T-SQL语法。 三、实验内容 (一)存储过程 在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学课程编号与课程名称,若院系不存在,返回提示信息。 提示:D_Info表中存储了院系代码D_ID,而St_Info表中学号字段St_ID的前两位与之对应,则D_Info表与St_Info表之间的联系通过这两个字段的运算构成连接条件。 1.分别执行存储过程getPractice,查询“法学院”与“材料科学与工程学院” 的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号与课程名称。 create procedure getPractice @D_Name varchar(30) output as begin if not exists (select * from D_Info where D_Name= @D_Name ) print '对不起,该院系不存在' else select st_info、St_ID,C_Info、C_No,C_Name from s_c_info inner join st_info on st_info、St_ID=s_c_info、st_id inner join C_Info on s_c_info、c_no=C_Info、C_No where st_info、St_ID in ( select St_ID from st_info join D_Info on D_Info、D_ID =left(st_info、St_ID,2) where C_Info、C_Type='实践' and D_Info、D_Name= @D_Name ) end go

存储过程的实例

存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 --------------------基本语法-------------------- 一.创建存储过程 create procedure sp_name() begin ......... end 二.调用存储过程 1.基本语法:call sp_name() 注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递 三.删除存储过程 1.基本语法: drop procedure sp_name// 2.注意事项 (1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 四.其他常用命令 1.show procedure status 显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等2.show create procedure sp_name 显示某一个mysql存储过程的详细信息 --------------------数据类型及运算符-------------------- 一、基本数据类型: 略 二、变量: 自定义变量:DECLARE a INT ; SET a=100; 可用以下语句代替:DECLARE a INT DEFAULT 100; 变量分为用户变量和系统变量,系统变量又分为会话和全局级变量 用户变量:用户变量名一般以@开头,滥用用户变量会导致程序难以理解及管理 1、在mysql客户端使用用户变量 mysql> SELECT 'Hello World' into @x; mysql> SELECT @x; mysql> SET @y='Goodbye Cruel World'; mysql> select @y; mysql> SET @z=1+2+3; mysql> select @z; 2、在存储过程中使用用户变量 mysql> CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World'); mysql> SET @greeting='Hello'; mysql> CALL GreetWorld( );

实验六存储过程设计

嘉应学院计算机学院 2012年 12月12日 一、实验目的 通过实验掌握SQL SERVER存储过程的基本设计方法。 二、实验原理 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合,它被编译并存储为一个单一的数据库对象,可用存储过程实现批处理。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 游标(Cursor)它使用户可逐行访问由数据库返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。基本语法: create procedure 存储过程名 (参数表 ) as t_sql语句的集合 t_sql语句除SQL语句外,还可包括声明变量,流控制语句及游标等。 (注意:t_sql语句在不同的数据库系统中,语法不同)

三、实验环境 操作系统:Windows Server 2003 、Windows 7 编译环境:SQL Server Enterprise Manager 数据库管理系统:Microsoft SQL Server 2005 四、实验步骤及内容 1. 了解T_SQL语法 (1)变量 A.局部变量 例如:declare @v_sno nvarchar(20), @v_grade float /* 声明了两个局部变量 */ B.全局变量 如:@@error, @@fetch_status C.表变量 声明表类型变量的语句将该变量初始化为一个具有指定结构的空表。 例如: declare @Mytab table (id int primary key, books varchar(15) ) insert @Mytab values(1,'9901') insert @Mytab values(2,'9902')

相关文档
最新文档