第8章 存储过程的操作与管理

第8章 存储过程的操作与管理
第8章 存储过程的操作与管理

第8章存储过程的操作与管理

存储过程概述

存储过程是为完成特定的功能而汇集在一起的一组SQL程序语句,经编译后存储在数据库中的SQL程序。

在SQL Server 中使用存储过程而不使用存储在客户端计算机本地的Transact-SQL 程序的优点包括:

(1)存储过程已在服务器注册。

(2)存储过程具有安全特性(例如权限)和所有权链接,以及可以附加到它们的证书。(3)存储过程可以强制应用程序的安全性。

(4)存储过程允许模块化程序设计。

(5)存储过程是命名代码,允许延迟绑定。

(6)存储过程可以减少网络通信流量。

8.1 创建存储过程

在SQL Server中,可以使用两种方法创建存储过程:

(1)使用创建存储过程模板创建存储过程;

(2)利用SQL Server 管理平台创建存储过程。

当创建存储过程时,需要确定存储过程的三个组成部分:

(1)所有的输入参数以及传给调用者的输出参数。

(2)被执行的针对数据库的操作语句,包括调用其他存储过程的语句。

(3)返回给调用者的状态值,以指明调用是成功还是失败。

CREATE PROCEDURE的语法形式如下:

CREATE {PROC|PROCEDURE} [schema_name.]procedure_name[;number]

[{@parameter[type_schema_name.] data_type}

[VARYING][=default][[OUT[PUT]][,...n]

[WITH [,...n]

[FOR REPLICATION]

AS

{[;][...n]|}[;] ::= [ENCRYPTION][RECOMPILE] EXECUTE_AS_Clause]

::=

{[BEGIN] statements [END]}

::= EXTERNAL NAME assembly_name.class_name.method_name

8.1.1 使用模板创建存储过程

(1)在SQL Server 管理平台中,选择“视图(View)”菜单中的“模板资源资源管理器(Template Explorer)”,出现“模板资源管理器(Template Explorer)”窗口,选择“存储过程”中的“创建存储过程”选项,如图8-1所示。

(2)在文本框中可以输入创建存储过程的Transact_SQL语句,单击“执行”按钮,即可创建该存储过程。

图8-1 创建存储过程模板

8.1.2使用管理平台创建存储过程

(1)在SQL Server管理平台中,展开指定的服务器和数据库,然后展开程序,右击存储过程选项,在弹出的快捷菜单中依次选择“新建→存储过程…”选项,如图8-2所示,出现创建存储过程窗口。

(2)在文本框中可以输入创建存储过程的Transact_SQL语句,单击“执行”按钮,即可创建该存储过程。

图8-2 新建存储过程

例8-1创建一个带有SELECT语句的简单过程,该存储过程返回所有员工姓名,Email地址,电话等。该存储过程不使用任何参数

程序清单如下。

USE adventureworks

GO

CREATE PROCEDURE au_infor_all

AS

SELECT lastname, firstname, emailaddress, phone

FROM person.contact

GO

例8-2 创建一个存储过程,以简化对sc表的数据添加工作,使得在执行该存储过程时,其参数值作为数据添加到表中。

程序清单如下:

CREATE PROCEDURE [dbo].[ pr1_sc_ins]

@Param1 char(10),@Param2 char(2),@Param3 real

AS

BEGIN

insert into sc(sno,cno,score) values(@Param1,@Param2,@Param3)

END

例8-3创建一个带有参数的简单存储过程,从视图中返回指定的雇员(提供名和姓)及其职务和部门名称,该存储过程接受与传递的参数精确匹配的值

程序清单如下。

USE AdventureWorks;

GO

CREATE PROCEDURE GetEmployees

@lastname varchar(40),

@firstname varchar(20)

AS

SELECT LastName, FirstName, JobTitle, Department

FROM HumanResources.vEmployeeDepartment

WHERE FirstName = @firstname AND LastName = @lastname;

GO

例8-4下面的存储过程从表person.contact中返回指定的一些员工姓名及其电话。该存储过程对传递的参数进行模式匹配。如果没有提供参数,则使用预设的默认值(姓氏以字母D 开头)

程序清单如下。

USE AdventureWorks;

GO

CREATE PROCEDURE au_infor2

@lastname varchar(40) = 'D%', @firstname varchar(20) = '%'

AS

SELECT firstname, lastname, phone

FROM person.contact

WHERE firstname LIKE @firstname AND lastname LIKE @lastname

GO

例8-5以下示例显示有一个输入参数和一个输出参数的存储过程。存储过程中的第一个参数@sname将接收由调用程序指定的输入值(学生姓名),第二个参数@sscore(成绩)将用于将该值返回调用程序。SELECT 语句使用@sname参数获取正确的@sscore值,并将该值分配给输出参数。

程序清单如下:

CREATE PROCEDURE s_score

@sname char(8),@sscore real output

AS

SELECT @sscore =score from sc join s on s.sno=sc.sno

where sn=@sname

GO

8.1.3 执行存储过程

可以使用Transact-SQL EXECUTE 语句来运行存储过程。存储过程与函数不同,因为存储过程不返回取代其名称的值,也不能直接在表达式中使用。

执行存储过程必须具有执行存储过程的权限许可,才可以直接执行存储过程,直接执行存储

过程可以使用EXECUTE命令来执行,语法形式如下:

[[EXEC[UTE]]

{

[@return_status=]

{procedure_name[;number]|@procedure_name_var}

[[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]}

[,...n]

[ WITH RECOMPILE ]

例8-6 执行存储过程au_infor_all。

au_infor_all 存储过程可以通过以下方法执行:

EXECUTE(EXEC)au_infor_all

例8-7 使用EXECUTE 命令传递参数,执行例8-2定义的存储过程pr1_sc_ins。

sc_ins存储过程可以通过以下方法执行:

EXEC pr1_sc_ins ‘3130040101’,’c1’,85

当然,在执行过程中变量可以显式命名:

EXEC sc_ins @Param1=’ 3130040101’,@Param2=’c1’, @Param3=85

例8-8 执行例8-3定义的存储过程GetEmployees 。

GetEmployees存储过程可以通过以下方法执行:

EXECUTE(EXEC)GetEmployees 'Dull', 'Ann' 或者

EXECUTE(EXEC)GetEmployees @lastname = 'Dull', @firstname = 'Ann' 或者

EXECUTE(EXEC)GetEmployees @firstname = 'Ann', @lastname = 'Dull'

8.2查看、修改和删除存储过程

8.2.1 查看存储过程

(1)使用SQL Server管理平台查看用户创建的存储过程。

在SQL Server管理平台中,展开指定的服务器和数据库,选择并依次展开“程序→存储过程”,然后右击要查看的存储过程名称,如图8-3所示,从弹出的快捷菜单中,选择“创建存储过程脚本为→CREATE到→新查询编辑器窗口”,则可以看到存储过程的源代码。

图8-3 查看存储过程

(2)使用系统存储过程来查看用户创建的存储过程。

可供使用的系统存储过程及其语法形式如下:

sp_help,用于显示存储过程的参数及其数据类型,其语法为:

sp_help [[@objname=] name],参数name为要查看的存储过程的名称。

sp_helptext,用于显示存储过程的源代码,其语法为:

sp_helptext [[@objname=] name],参数name为要查看的存储过程的名称。

sp_depends,用于显示和存储过程相关的数据库对象,其语法为:

sp_depends [@objname=]’object’,参数object为要查看依赖关系的存储过程的名称。sp_stored_procedures,用于返回当前数据库中的存储过程列表,其语法为:

sp_stored_procedures[[@sp_name=]'name']

[,[@sp_owner=]'owner']

[,[@sp_qualifier =] 'qualifier']

其中,[@sp_name =] 'name' 用于指定返回目录信息的过程名;[@sp_owner =] 'owner' 用于指定过程所有者的名称;[@qualifier =] 'qualifier' 用于指定过程限定符的名称。

8.2.2 修改存储过程

存储过程可以根据用户的要求或者基表定义的改变而改变。使用ALTER PROCEDURE语句可以更改先前通过执行CREATE PROCEDURE 语句创建的过程,但不会更改权限,也不影响相关的存储过程或触发器。

修改存储过程语法形式如下:

ALTER PROC[EDURE] procedure_name[;number]

[{@parameter data_type}

[VARYING][=default][OUTPUT]][,...n]

[WITH

{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]

[FOR REPLICATION]

AS

sql_statement [ ...n ]

例8-9创建了一个名为proc_person 的存储过程,该存储过程包含姓名和Email地址信息。然后,用ALTER PROCEDURE重新定义了该存储过程,使之只包含姓名信息,并使用ENCRYPTION关键字使之无法通过查看syscomments表来查看存储过程的内容。

程序清单如下。

USE adventureworks

GO

/*创建一个存储过程,该存储过程包含姓名和Email地址信息*/

CREATE PROCEDURE proc_person

AS

SELECT firstname, lastname, emailaddress

FROM person.contact

ORDER BY lastname, firstname

GO

下面对该存储过程进行重新定义。使之只包含姓名信息,并使用ENCRYPTION关键字使之无法通过查看syscomments表来查看存储过程的内容。

程序清单如下:

ALTER PROCEDURE proc_person

WITH ENCRYPTION

AS

SELECT firstname, lastname

FROM person.contact

ORDER BY lastname, firstname

GO

8.2.3 重命名和删除存储过程

1. 重命名存储过程

修改存储过程的名称可以使用系统存储过程sp_rename,其语法形式如下:sp_rename 原存储过程名称,新存储过程名称

另外,通过SQL Server管理平台也可以修改存储过程的名称。在SQL Server管理平台中,右击要操作的存储过程名称,从弹出的快捷菜单中选择“重命名”选项,当存储过程名称变成可输入状态时,就可以直接修改该存储过程的名称。

2. 删除存储过程

删除存储过程可以使用DROP命令,DROP命令可以将一个或者多个存储过程或者存储过程组从当前数据库中删除,其语法形式如下:

drop procedure {procedure}[,…n]

当然,利用SQL Server管理平台也可以很方便地删除存储过程。在SQL Server管理平台中,右击要删除的存储过程,从弹出的快捷菜单中选择“删除”选项,则会弹出除去对象对话框,在该对话框中,单击“确定”按钮,即可完成删除操作。单击“显示相关性”按钮,则可以在删除前查看与该存储过程有依赖关系的其他数据库对象名称。

实训:

1.通过[企业管理器]或[查询分析器]创建用户自定义函数、存储过程、触发器

创建一个用户自定义函数:[查询宿舍函数],通过输入学生姓名,查询学生的姓名、性别、宿舍编号、宿舍电话号码。并调用该函数查询。

2. 创建一个带参数的存储过程:[查询宿舍过程],输入宿舍编号,查询某宿舍同学的存储过程。并带函数,执行该存储过程。

数据库原理课程设计实验[创建存储过程与触发器]

存储过程与触发器实验日期和时间: 2016 年 5 月13 日、 星 期五第节 实验室:DJ2-信息管理实验室 班级:学号:姓名: 实验环境: 1.硬件:笔记本电脑 2.软件:SQL Server 2012 实验原理: 存储过程概念:存储过程是事先编好的,存储在数据库中的一组被编译了的T-SQL命令集合,这些命令用来完成对数据库的指定操作。存储过程可以接受用户的输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言(DDL)和数据操作语言(DML)语句,然后返回输入参数。 触发器概念:触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 实验任务: 此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给老师演示验收,课后提交电子版报告。如额外完成自拟题目应当事先将所拟题目提交给老师或在报告中明确标注题意。

假定有学校的图书馆管理信息系统,可以用于日常管理书库和同学们的借还书工作。以下列出参考的库表情况: 根据管理的业务需求来分析,该管理信息系统的数据库应至少包括如下数据表:(打★号的是必须有的表) 1.★图书现有库存表。作用:记录图书的现有库存情况。至少包括:书号、书名、 作者、简介、类别、价格、出版社、出版日期、现有库存数量、最小库存量、库 存总量、库存位置等。 2.★读者信息表。作用:记录读者信息。至少包括:读者编号、证件类型、证件号 码、姓名、性别、职业(可填写教师、学生、教工、其它……)、所属单位、地 址、联系电话等。 3.★借书记录表。作用:记录借书情况,以及是否归还。至少包括:借阅ID(主 键,可设置为自动编号)、书号、读者编号、借阅数量、借阅日期、是否归还、 管理员编号……等。 4.★还书记录表。作用:记录还书情况。至少包括:还书ID(主键,可设置为自动 编号)、书号、读者编号、归还数量、归还日期、是否超期(超过假设45天为 超期)、超期天数、管理员编号……等。(附:为简化操作,续借可视为归还后 再借)。 5.管理员信息表。作用:记录负责管理书库和借书还书工作的管理员信息。至少包 括:管理员编号、职工编号(在职工档案表中的职工编号)、用户名、密码、管 理员级别等……。 6.职工档案表表。作用:记录职工档案。至少包括: 职工编号、姓名、性别、单 位、职称、职务、出生日期、学历、……其它字段自拟。

测验答案-第13章存储过程的创建与管理

测验 填空题 (1) 在SQL Server 2005中,3种基本存储过程的类型分别是、和。 答案:用户自定义存储过程,系统存储过程,扩展存储过程 (2) 在SQL Server 2005中,用户既可以使用语言编写存储过程,也可以使用方式创建存储过程。 答案:Transact-SQL,CLR (3) 如果在存储过程中定义了输出参数,则必须使用关键词说明。 答案:OUTPUT 选择题 (1) 可以使用哪个系统目录视图查看存储过程定义的文本。 A. B. C. D. 答案:C (2) 通过下列哪个系统存储过程可以查看存储过程与其他数据库对象的依赖关系。 A. sp_help B. sp_rename C. sp_depend D. sp_depends 答案:D (3) 下列哪种方式不能重新编译存储过程。 A. 使用sp_recompile系统存储过程 B. 在CREATE PROCEDURE语句中使用WITH RECOMPILE C. 在EXECUTE语句中使用WITH RECOMPILE子句 D. 使用系统存储过程sp_depends 答案:D (4) 下列哪个命令可以在存储过程的定义中使用。 A. CREATE VIEW B. CREATE TABLE C. CREATE DEFAULT D. CREATE RULE 答案:B 判断题 (1) 可以使用其他.NET架构下的语言,如C#编写存储过程并部署到SQL Server 2005。 答案:√ (2) 创建存储过程的命令关键词CREATE PROCEDURE不可以缩写。 答案:× (3) 数据库BlueSkyDB中的存储过程PrcDeleteBook用于删除Books表中的记录,如果用

创建存储过程

创建存储过程 一、在SSMS图形化界面下创建一个存储过程 从stsc数据库的三个表中查询某人指定课程的成绩和学分。该存储过程接收与传递参数精确匹配的值,操作步骤如下所示: (1)启动SQL Server Management Studio,在对象资源管理器中展开“数据库”结点,选中stsc数据库,将其展开。然后展开“可编程性”结点,右击“存储过程”选项,在弹出的快捷菜单中选择“新建存储过程”命令,结果如图所示: (2)打开存储过程的脚本编辑窗口,在该窗口中输入要创建存储过程的T-SQL语句,输入后完成后单击按钮,系统提示“命令已成功完成”,如下所示; 这里输入的创建存储过程的T-SQL语句如下: use stsc go create procedure student_info @stname char(8), @cname char(16) as select a.stno,stname,cname,grade,t.credit from student a join score b on a.stno=b.stno join course t on https://www.360docs.net/doc/566209414.html,o=https://www.360docs.net/doc/566209414.html,o where a.stname=@stname and https://www.360docs.net/doc/566209414.html,ame=@cname

存储过程,至此完成存储过程的创建,如下所示: 二、使用T_SQL语句创建存储过程 创建一个存储过程do_insert,作用是向student表中插入一行数据。创建另外一个存储过程do_action,在其中调用第一个存储过程,并根据条件处理该行数据,处理后输出相应的信息。 (1)创建do_insert存储过程,作用是向student表中插入一行数据,如图所示:

存储过程的典型例子

可能有不少朋友使用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 Server如何定时作业(执行某个存储过程)

SQL Server如何定时作业(执行某个存储过程) 如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理->SQL Server代理->作业来实现。 1、管理->SQL Server代理->作业(按鼠标右键)->新建作业-> 2、新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号-> 分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server用户[也可选其它的登录]-> 描述[填写本次工作详细描述内容]; [ 创建作业分类的步骤: SQL Server代理->作业->右键选所有任务->添加、修改、删除] 3、新建作业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型[Transact-SQL(TSQL)脚本]-> 数据库[要操作的数据库]->命令 [ 如果是简单的SQL直接写进去即可,也可用打开按钮输入一个已写好的*.sql文件 如果要执行存储过程,填 exec p_procedure_name v_parameter1,[ v_parameter2…v_parameterN] ] ->确定 (如果有多个步骤,可以再次调用下面的新建按钮;也可以对已有的多个步骤插入、编辑、删除); 4、建作业属性(调度)->新建调度->名称[自定义调度名称]->启用的方框内是勾号->调度->反复出现-> 更改[调度时间表]->确定 (如果只要保存此作业,不要定时做可以把启用的方框内是勾号去掉); 5、建作业属性(通知)->用默认的通知方法就好[当作业失败时,写入Windows应用程序系统日志] ->确定。 跟作业执行相关的一些SQL Server知识: SQLSERVERAGENT服务必须正常运行,启动它的NT登录用户要跟启动SQL Server数据库的NT登录用户一致。 点作业右键可以查看作业执行的历史记录情况,也可以立即启动作业和停止作业。 最近在看作业历史记录时,发现有的作业记录的历史记录多,有的作业记录的记录的历史记录少. 如何能使某些作业按各自的需求,保留一段时间.比如保留一个月的历史记录. 看了SQL Server的在线帮助文档,里面介绍说: 在管理->SQL Server代理->右键选属性->作业系统->限制作业历史记录日志的大小-> 作业历史记录日志的最大大小(行数) 默认为1000 如果某台机器的作业数量很多,一定要

实验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为输出参数,让主程序能够接收计算结果。

实验六管理存储过程11页word

实验六存储过程与触发器一、存储过程 【创建存储过程】: CREATE PROCEDURE [OWNER].[PROCEDURE NAME] AS 如:Use pubs Go Create procedure author_information As select au_lname,au_fname,title,pub_name from authors a join titleauthor ta on a.au_id=ta.au_id join titles t on t.title_id=ta.title_id join publishers p on t.pub_id=p.pub_id Go 【管理存储过程】: ?可以使用sp_helptext命令查看创建存储过程的文本信息。 Use pubs Go Sp_helptext author_information

Go ?可以用sp_help查看存储过程的一般信息。 Use pubs Go Sp_help author_information Go ?可以使用系统存储过程sp_rename修改存储过程的名字。 Use pubs Go Sp_rename author_information ,authors_information Go ?也可以使用企业管理浏览存储过程的信息,具体方法是: ?从树型结构上选中存储过程所在的数据库节点,展开该节点; ?选中数据库节点下的〖存储过程〗节点,则右边的列表列出了数据库中目前所 有的存储过程; ?选中存储过程,右击,执行〖属性〗命令, 则系统将弹出如图所示对话框。 ?可以在对话框中修改存储过程内容,并保 存修改。 ?如果想知道某个表被存储过程引用的情 况,可以使用sp_depends, Sp_depends authors

实验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导致错误。仔细检查改过错误后就解决了这个问题,这次实验让我了解了使用存储过程的好处,让我再以后的数据库学习中更好的熟练掌握这门课。

存储过程与触发器 实验报告

信息工程学院实验报告 课程名称:《数据库原理》 实验项目名称:存储过程与触发器 一、实验目的: (1)了解存储过程的概念 (2)掌握创建、执行存储过程的方法 (3)了解查看、修改和删除存储过程的方法 (4)了解触发器的概念 (5)掌握创建触发器的方法 (6)掌握查看、修改、删除触发器信息的方法 二、实验设备与器件 Win7 +Sql server 2008 三、实验内容与步骤 (一)存储过程 运行实验四附录中的SQL语句,准备实验数据。然后创建下列存储过程,并调试运行存储过程,查看运行结果。 1.在企业管理器中创建一个名为StuInfo的存储过程,完成的功能是在student表中查询系号为D2的学号、姓名、性别、年龄、系号的内容。 CREATE PROCEDURE StuInfo AS SELECT SNO AS学号, SNAME AS姓名, SSEX AS性别, SAGE AS年龄, DNO AS系号 FROM student WHERE DNO='D2' 结果: stuinfo 2.使用T_SQL语句创建存储过程,完成的功能是在表student,course和study中查询以下字段:学号、姓名、性别、课程名称、考试分数。

use mydb --查询是否已存在此存储过程,如果存在,就删除它 if exists(select name from sysobjects where name='StuScoreInfo'and type='P') drop procedure StuScoreInfo go --创建存储过程 CREATE PROCEDURE StuScoreInfo as select student.sno as学号, sname as姓名, ssex as性别, https://www.360docs.net/doc/566209414.html,ame as课程名称, study.grade as考试分数 from student,course,study where student.sno=study.sno and https://www.360docs.net/doc/566209414.html,o=https://www.360docs.net/doc/566209414.html,o 结果: StuScoreInfo 3.使用T_SQL语句创建一个带有参数的存储过程stu_sno_info,该存储过程根据传入的学生编号,在student表中查询此学生的信息。 if exists(select name from sysobjects where name='stu_info'and type='P') drop procedure stu_info go --创建存储过程 create procedure stu_info @sno varchar(8) as select sno as学号, sname as姓名, ssex as性别, sage as年龄, dno as年级

第二章 数据库的创建与管理1

第二章数据库的创建与管理 2.1 SQL Server数据库 2.1.1 数据库的结构 2.1.2 系统数据库 2..2 使用企业管理器创建数据库 2.2.1企业管理器的工作界面 2.2.2企业管理器创建用户数据库 2.2.3向导创建用户数据库 2.3使用T-SQL语句创建数据库 2.3.1查询分析器 2.3.2 用T-SQL语句创建数据库 2.4 修改和删除数据库 2.4.1 修改数据库 2.4.2 删除数据库 2..5 数据库迁移 2.5.1分离和附加数据库 2.5.2 导入和导出数据

2.1 SQL Server数据库 2.1.1 数据库的结构 2.1数据库的存储结构 数据库的存储结构分为逻辑存储结构和物理存储结构两种。 数据库的逻辑存储结构指的是,SQL Server的数据库是由诸如表、视图、索引等各种不同的数据库对象所组成。 数据库的物理存储结构是讨论数据库文件是如何在磁盘上存储的,数据库在磁盘上是以文件为单位存储的,由数据库文件和事务日志文件组成,一个数据库至少应该包含一个数据库文件和一个事务日志文件。 一、数据库文件 1.主数据库文件(Primary Database File) 一个数据库可以有一个或多个数据库文件,一个数据库文件只能属于一个数据库。当有多个数据库文件时,有一个文件被定义为主数据库文件(简称为主文件),其扩展名为mdf 主数据库文件用来存储数据库的启动信息以及部分或者全部数据,是所有数据库文件的起点,包含指向其它数据库文件的指针。一个数据库只能有一个主数据库文件。 2.次数据库文件(Secondary Database File) 用于存储主数据库文件中未存储的剩余数据和数据库对象,一个数据库可以没有次数据库文件,但也可以同时拥有多个辅助数据库文件。 次数据库文件的扩展名为ndf(简称为辅助文件)。 3.事务日志文件 存储数据库的更新情况等事务日志信息,当数据库损坏时,管理员使用事务日志恢复数据库。 每一个数据库至少必须拥有一个事务日志文件,而且允许拥有多个日志文件。事务日志文件的扩展名为ldf,日志文件的大小至少是512KB。 SQL Server事务日志采用提前写入的方式 SQL Server 2000的文件拥有两个名称,即逻辑文件名和物理文件名。当使用Transact-SQL 命令语句访问某一个文件时,必须使用该文件的逻辑名。 物理文件名是文件实际存储在磁盘上的文件名,而且可包含完整的磁盘目录路径。 SQL Server 2000用文件来存放数据库,数据库文件有三类。 1.主数据库文件(Primary):(1)存储数据库的启动信息,是所有数据库文件的起点,包含 指向其它数据库文件的指针 (2)存放数据,每个数据库都必须有一个主数据文件。 2.次要数据文件(Secondary):存放数据,一个数据库可以没有也可以有多个Secondary 文件。 3.事务日志文件(Transaction Log):存放事务日志,每个数据库至少有一个或多个日志文 件。

实验七 存储过程及应用完整版含截图

实验七存储过程及应用 1.实验目的 1、理解存储过程的概念。 2、掌握存储过程的使用方法。 2.实验要求 1.建立如下的存储过程(基于前面实验建立的表和插入的数据,并为每个存储过程设计返回的状态值): (1)按要求设计完成如下功能的存储过程。 ①查询平均分数在x到y范围内的学生信息。 说明: 该存储过程有两个参数; 要求查询的学生信息包括学号、姓名、院系名称和平均分数。 ②更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩。 (2)自行再分别设计一个完成查询和完成操作功能的存储过程(在实验报告中要准确描述功能需求)。 (3)在客户端以存储过程和输入SQL语句的方式分别执行相同的查询或操作,比较使用和不使用存储过程的区别。 3、实验过程 (1)①查询平均分数在x到y范围内的学生信息 create procedure cc711@x smallint,@y smallint as select学生.学号,学生.姓名,院系.名称,学生.平均成绩 from学生join院系on学生.院系=院系.编号 where学生.平均成绩between@x and@y EXECUTE cc71160,90

②更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩 create procedure mcc712@xh nchar(8),@kcbh nchar(8),@cj int as update选课set成绩=@cj where学号=@xh and课程编号=@kcbh declare@pjcj int select@pjcj=AVG(成绩)from选课where学号=@xh return@pjcj declare@avg int execute@avg=mcc7122,5,98 print'更新后平均成绩:'+str(@avg,6)

实验2 数据库的创建和管理

实验2 数据库的创建和管理 学号: 2011193158 姓名:韩江玲 一、实验目的: 1、掌握使用企业管理器创建SQL Server数据库的方法; 2、掌握使用T-SQL语言创建SQL Server数据库的方法; 3、掌握附加和分离数据库的方法; 4、掌握使用企业管理器或存储过程查看SQL数据库属性的方法; 5、熟悉数据库的收缩、更名和删除; 6、掌握使用企业管理器或sp_dboption存储过程修改数据库选项的方法。 二、实验内容和步骤: 本次实验所创建数据库(包括数据库文件和事务日志)存放位置都为“D:\TestDB”。因此首先在D盘下新建文件夹TestDB。 1. 数据库的创建 创建数据库的过程实际上就是为数据库设计名称、设计所占用的存储空间和文件存放位置的过程。 实验内容1:使用SQL Server企业管理器创建一个数据库,具体要求如下: 1)数据库名称为Test1。 2)主要数据文件:逻辑文件名为Test1_Data1,物理文件名为Test1_Data1.mdf,初始容量为1MB,最大容量为10MB,递增量为1MB。 3)次要数据文件:逻辑文件名为Test1_Data2,物理文件名为Test1_Data2.ndf,初始容量为1MB,最大容量为10MB,递增量为1MB。 4)事务日志文件:逻辑文件名为Test1_Log,物理文件名为Test1_Log.ldf,初始容量为1MB,大容量为5MB,递增量为1MB。其他选项为默认值。

注:我在创建数据库的时候,系统要求主文件(Test1_data1和Test1_data2)的大小不能小于3MB,所以在本例中我设置的主文件的初始大小均为3MB 实验内容2:用Transact-SQL(T-SQL)语句创建数据库,实验步骤:启动“查询分析器”,在编辑窗口输入SQL语句。 用T-SQL语句创建一个名为teach的数据库,它由5MB的主数据文件、2MB 的次数据文件和1MB的日志文件组成。并且主数据文件以2MB的增长速度增长,其最大容量为15MB;次数据文件以10%的增长速度增长,其最大容量为10MB;事务日志文件以1MB增长速度增长,其最大日志文件大小为10MB。运行完语句后,仔细查看结果框中的消息。 提示:在查询分析器中输入如下SQL语句。 CREATE DATABASE teach On (name= teach_data1, filename= 'd:\TestDB\teach_data1.mdf ', size=5,

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和数据库之间传递,相当消耗系统资源。事实上,如果数据库仅仅起着

《SQL Server 数据库》数据库存储过程、触发器的创建于管理实验报告

北华航天工业学院《数据库系统管理》 实验报告 报告题目: 存储过程、触发器的创建于管理 所在系部:计算机科学与工程系 所在专业:网络工程专业 学号: 姓名: 教师姓名: 完成时间:2011 年10 月19 日 北华航天工业学院教务处制

存储过程、触发器的创建与管理 一、实验目的 1、掌握存储过程的概念、优点、特点及用途; 2、掌握创建、执行、查看、修改和删除存储过程的方法; 3、了解触发器和一般存储过程的区别、概念及优点; 4、掌握创建、查看、修改和删除触发器的方法。 二、实验内容 (一)附加上次实验所创建的数据库“db_Library”,并回顾该数据库的数据表信息。 (二)练习创建和管理存储过程 1、使用管理控制台创建一个名为“计算机系借阅信息_PROC”的无参存储过程,要求显示计算机系读者2011-1-1以后借阅的图书信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段,并执行该存储过程,查看显示结果。 2、使用T-SQL语句创建一个名为“读者借阅信息_PROC”的带参数的存储过程,要求根据输入的读者的编号显示读者的所有借阅信息,包括“读者编号”、“姓名”、“系部”、“图书编号”、“图书名称”和“借阅日期”等字段,并执行该存储过程,查看显示结果。 create proc读者借阅信息_PROC1 @dzbh char(10) as begin select tb_reader.读者编号,姓名,系部, tb_book.图书编号,书名,借阅日期 from tb_book,tb_reader,tb_borrow where tb_book.图书编号=tb_borrow.图书编号 and tb_reader.读者编号=tb_borrow.读者编号 and tb_reader.读者编号=@dzbh end -- declare @srcs char(10),@fhzt int set @srcs='R10009' exec @fhzt=读者借阅信息_PROC1 @srcs print'执行状态值为'+cast(@fhzt as varchar(10)) 3、使用T-SQL语句创建一个名为“图书借阅信息_PROC”的带参数的存储过程,要求根据输入的图书编号计算该图书的借阅数量,并根据程序执行结果返回不同的值,执行成功返回0,不成

实验4创建和使用存储过程

实验4创建和使用存储过程 4.1 实验目的 (1)理解存储过程的功能和特点。 (2)学会使用Transact-SQL编写存储过程的方法。 (3)学会如何使用SSMS创建存储过程。 (4)理解可以使用存储过程来完成对数据库的操作。 4.2 实验内容 (1)创建带输入参数的存储过程。 (2)执行所创建的存储过程。 (3)删除所有新创建的存储过程。 4.3.1 创建带输入参数的存储过程 在查询命令窗口中输入创建存储过程的CREATE PROCEDURE语句。 这里创建一个带输入参数的存储过程Stu_Proc1,其中的输入参数用于接收课程号,默认值为c01,然后在SC表中查询该课成绩小于70的学生学号,接着在Student表中查找这些学生的基本信息,包括学号、姓名、性别和系信息, 4.3.2 执行所创建的存储过程 在查询分析器里运行存储过程,输出运行结果。 EXECUTE Stu_Proc1 'c01'

CREATE PROCEDURE Stu_Proc2 @dept char(20) AS select student.sno, sname, https://www.360docs.net/doc/566209414.html,o.credit from student join sc on student.sno=sc.sno join course on https://www.360docs.net/doc/566209414.html,o=https://www.360docs.net/doc/566209414.html,o where student.sdept=@dept 4.3.3 删除新建的存储过程 在查询命令的窗口中输入DROP PROCEDURE语句和所有新创建的存储过程名。DROP PROCEDURE Stu_Proc1

4.3.4 查询学生的学号、姓名、修的课程号、课程名、课程学分,将学生所在系作为输入参数,执行此存储过程,并分别指定一些不同的输入参数值。 4.3.5 查询指定系的男生人数,其中系为输入参数,人数用输出参数返回。

数据库存储过程与触发器实验报告

南昌航空大学实验报告 二00 年月日 课程名称:数据库概论实验名称:数据库存储过程与触发器 班级:122031 姓名:同组人: 指导教师评定:签名: 一、实验环境 1.Windows2000或以上版本; 2.SQLServer 2005。 二、实验目的 熟悉不同数据库的存储过程和触发器,重点实践SQL Server2005,掌握SQL Server2005中有存储过程与触发器的相关知识。 三、实验要求 完成实验指导书中p115-7和p132 -4。 四、实验步骤及参考源代码 1.创建与执行存储过程 create procedure C_P_Proc as select distinct https://www.360docs.net/doc/566209414.html,o,cna,pna,num from paper,customer,cp where https://www.360docs.net/doc/566209414.html,o=https://www.360docs.net/doc/566209414.html,o and paper.pno=cp.pno and cna='李涛' or cna='钱金浩' go execute C_P_Proc 2.删除存储过程 drop procedure C_P_Proc 3.创建插入触发器 create trigger TR_PAPER_I ON PAKER12203125 FOR INSERT AS DECLARE @appr float DECLARE @apno int SELECT @appr=ppr,@apno=pno from inserted begin if @appr<0 or @appr is null begin

raiserror('报纸的单价为空或小于!',16,1) update paper set ppr=10 where paper.pno=@apno end end 4.创建删除触发器 create Trigger TR_PAPER_D on PAKER12203125 after delete as declare @ipno char(6) declare @icount int; select @icount= count(*) from deleted,cp where deleted.pno=cp.pno if @icount>=1 begin select @ipno=pno from deleted raiserror('级联删除cp表中的数据',16,1) delete from cp where cp.pno=@ipno end 5.创建修改触发器 create trigger TR_PAPER_U ON PAKER12203125 for update as declare @ippr float select @ippr=ppr from inserted if @ippr<0 or @ippr is null begin raiserror('输入单价不正确',16,1) rollback transaction end 6. 分别对PAKER12203125表进行插入、修改、删除操作 insert into PAKER12203125 (pno,pna,ppr)values('000006','江西日报','1') insert into PAKER12203125 (pno,pna,ppr)values('000007','江南都市报','15.5') delete from PAKER12203125 where pno='000001' update PAKER12203125 set ppr=12.5 where pno='000002' update PAKER12203125 set ppr=-2 where pno='000004' 五、实验结果

2.数据库的创建和管理

2 使用向导创建并管理数据库 2.1.实验目的 1.熟悉SQL Server 2005 中SQL Server Management Studio的环境; 2.了解SQL Server 2005数据库的逻辑结构和物理结构; 3.掌握使用向导创建和管理数据库。 2.2.实验环境 硬件环境:PC机一台; 软件环境:SQL SERVER 2005; 2.3.实验内容 设有一学籍管理系统,其数据库名为“EDUC”,初始大小为10MB,最大为50MB,数据库自动增长,增长方式是按5%比例增长;日志文件初始为2MB,最大可增长到5MB,按1MB增长。数据库的逻辑文件名为“student_data”, 物理文件名为“student_data.mdf,存放路径为“f:\data\student_data.mdf”。日志文件的逻辑文件名为“student_log”, 物理文件名为“student_log.ldf”,存放路径为“f:\data\student_data.ldf'”。 使用SQL Server Management Studio(简称SSMS)创建数据库。 (1)使用向导创建上面描述的数据库; (2)使用向导删除上面建立的数据库; (3)使用SQL语言编程建立上面描述的数据库; (4)修改数据库; (5)查看数据库; (6)删除数据库; (7)更改数据库所有者;

2.4实验步骤 2.4.1使用向导创建上述的数据库。 使用SQL Server Management Studio(简称SSMS)创建数据库。 1.启动SSMS 在开始菜单中:所有程序->SQL Server 2005 ->SQL Server Management Studio,单击“连接”按钮,便可以进入【SQL Server Management Studio】窗口。如果身份验证选择的是“混合模式”,则要输入sa的密码,如图2-1,2-2所示; 图 2-11 连接SQLServer 2005

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

华北水利水电学院 [数据库实验] [存储过程创建与应用] 姓名:*** 班级:*** 学号:*** 所在专业:计算机科学与技术

实验五存储过程创建与应用 一、实验目的 使学生理解存储过程的概念,掌握创建存储过程的使用、执行存储过程和查看、修改、删除存储过程的方法。 二、实验内容过程 (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两个存储过程。 三、实验总结 这次试验也说不上很难,比前两次增加了一点难度。感觉第三小题相比有点难度,但是经过查书最后做出来了。除了第四小题,其他在课本上都有原型,只要对照课本,都能做出来。做第四小题时遇到点问题,主要是往sc表中添加学生成绩记录不知道用什么语句。最后经过问同学,知道了该怎么做,做了出来!总体来说,还是比较简单的。

Oracle存储过程流程控制:一对多、多对一

Oracle存储过程流程控制:一对多、多对一 数据处理时经常出现处理好一份准备数据之后,接着可以跑多个互相独立不互相影响的存储过程,多对一也类似,但oracle自身好像没有直接拿来用的那种可以衔接并发调起存储过程的控件,对此自己有些小试验,分享下 一对多: 灵活使用job: 当一个存储过程后面可以并发多个时,我们可以在过程结尾用语句连续起几个job,job 建成后自己独立运行,不用再一个操作一个操作的一条线跑到黑了; 例子: Create table xd_20120411(number);--测试表 Create or replace procedure p_ xd_20120411 as—测试存储过程 i number; begin <> dbms_output.put_line(i); if i<5 then i:=i+1; dbms_lock.sleep(5); goto begin_do; else goto end_do; end if; <> insert into xd_20120411 values to_char(sysdate,’yyyymmddhh24miss’); commit; end; declare—执行测试 job1 number; job2 number; begin dbms_job.submit(job1,’ p_ xd_20120411’,sysdate);--job1输出参数 commit; dbms_job.submit(job1,’ p_ xd_20120411’,sysdate); --job2输出参数 commit; end; 执行测试后会发现,测试语句瞬间执行完毕,两个临时job建起并独立开始执行;可以在进程和运行job中看到这两条执行;个人举的例子可能不当,但原理就是这个意思。 多对一: 这就是多个过程为某一个过程做数据准备时用到 这个比较容易想到了,专门用带有flag的日志,每个准备过程执行完插入一份日志或在有日志的情况下更新flag值(如set flag=flag+1模式)(此处不commit,为的是锁住表,防止同时操作,待后面执行),接着查看日志,日志条件不满足则提交结束本过程;满足则调起

相关文档
最新文档