实验5 使用T-SQL编写存储过程访问数据库

合集下载

用T-SQL指令创建数据库和表

用T-SQL指令创建数据库和表

实验报告课程名称数据库系统原理实验日期10月10日实验项目名称用T-SQL指令创建数据库和表实验地点数据库实验室实验类型□验证型√设计型□综合型学时2一、实验目的及要求(本实验所涉及并要求掌握的知识点)1、掌握用T-SQL语句创建数据库和表的方法,掌握主键和外键的设置方法2、在SQL Server Management Studio中查看每个表的主键设置(若用SQL语句创建表时未设置主键,则在此进行设置),将SC表的(Sno,Cno)属性组设置为主键,验证Sno和Cno两个主属性均不能被设置为空值,从而理解关系的实体完整性规则。

3、理解并掌握“关系图”的作用和建立方法。

在SQL Server Management Studio中为创建的表建立“关系图”,从而理解关系的参照完整性规则(它与实体完整性规则一起被称为关系的两个不变性,由RDBMS自动支持)。

4、学习用SQL语句创建和修改基本表结构的方法。

5、初步了解用T-SQL指令插入数据的方法。

6、掌握用SQL指令修改表结构的方法7、掌握用T-SQL语句删除数据库和表的方法二、实验环境(本实验所使用的硬件设备和相关软件)安装XP操作系统的电脑一台Sql server2005开发版安装软件IIS5.0三、实验内容及步骤1、通过新建查询用SQL指令创建教材P82图3.2学生-课程数据库,数据库名为MyDB在SQL Server Management Studio中,单击工具栏上的新建查询,然后在查询窗口中输入下面SQL语句:注意:FILENAME指定要创建数据库的物理文件名,即数据文件的物理存放位置,一定要确保给出的文件路径是真实存在的,如果该路径不存在,请先建立路径然后再创建执行该命令后用下列方法查看MyDB的Student表是否创建成功:●若执行成功,则在左侧对象浏览器窗口中展开MyDB数据库中的“表”会看到名为“dbo.Student”表的图标(dbo即数据库拥有者,表示Student表是由数据库的拥有者创建的)。

实验训练5:存储过程与函数的构建与使用

实验训练5:存储过程与函数的构建与使用

实验训练5:存储过程与函数的构建与使用一、存储过程与函数的概念存储过程和函数都是数据库中的可执行代码,可以被多次调用和重复使用。

存储过程是一组预定义的SQL语句集合,可以在数据库中定义和存储。

而函数是一个独立的代码块,它接收输入参数并返回一个值。

二、存储过程的构建与使用1. 创建存储过程在MySQL中,创建存储过程需要使用CREATE PROCEDURE语句。

例如:CREATE PROCEDURE myproc()BEGINSELECT * FROM mytable;END;这个例子创建了一个名为myproc的存储过程,它会查询mytable表中的所有数据。

2. 调用存储过程使用CALL语句可以调用已经创建好的存储过程。

例如:CALL myproc();这个语句会执行myproc存储过程中定义的SQL语句。

3. 存储过程参数我们可以给存储过程添加参数来使其更加灵活。

例如:CREATE PROCEDURE myproc(IN p1 INT, IN p2 VARCHAR(50)) BEGINSELECT * FROM mytable WHERE column1 = p1 AND column2 = p2;END;这个例子创建了一个带有两个输入参数p1和p2的存储过程,它会查询mytable表中column1等于p1并且column2等于p2的数据。

4. 存储过程变量除了参数之外,存储过程还可以使用变量来存储中间结果。

例如:CREATE PROCEDURE myproc(IN p1 INT)BEGINDECLARE v1 INT;SET v1 = p1 * 2;SELECT * FROM mytable WHERE column1 = v1;END;这个例子创建了一个带有一个输入参数p1和一个变量v1的存储过程,它会将p1乘以2并将结果存储在v1变量中,然后查询mytable表中column1等于v1的数据。

数据库原理实验报告-T-SQL编程

数据库原理实验报告-T-SQL编程

XX大学XX学院图1图22、用户存储过程的编辑修改首先创建存储过程select_students, 在此基础上,将该过程更改为检索计算机专业的学生信息,用修改过程命令重新定义该存储过程。

2.1 输入以下代码:alter procedure select_students with encryptionasselect*from Student whereSdept='CS'order by Sno2.2 通过EXEC语句执行存储过程输入语句:EXEC select_students输出结果如下:3、用户存储过程的删除3.1 通过DROP语句删除存储过程输入语句:DROP procedure select_students输出结果如下:二、编写触发器1、在SQL中展开Student_and_Course数据库,在其中选择对应的表,将表展开,在展开的选项中右击“触发器”,在弹出的快捷菜单中选择“新建触发器”命令,在如图3所示的触发器编辑区中给出对应的触发器代码。

2、创建一个名为TR_AGEde1的触发器,要求在插入和更新时检查Student表中Sage是否在15至60之中,如果不在提示“年龄不合法”。

输入语句:CREATE TRIGGER TR_AGEON StudentFOR INSERT,UPDATEASDECLARE@age INTSELECT@age=SageFROM StudentIF@age NOT BETWEEN 15 AND 60BEGINROLLBACK TRANSACTIONRAISERROR ('年龄不合法',16,10)END图33、执行以下更新数据库的SQL代码,将在显示框内显示有关的信息,表示触发了数据表Student中的触发器TR_AGE.输入语句:UPDATE StudentSET Sage=26WHERE Sname='李勇'执行结果如图5:图54、同样,执行以下命令也会触发触发器TR_AGE.输入语句:INSERT INTO Student VALUES('200215128','张博','男',17,'CS') 完成3、4两步的输出结果如图6:图65、查看所创建触发器的详细信息,输入以下代码:USE student_and_courseEXEC sp_helptrigger StudentEXEC sp_helptext TR_AGE执行结果如图7:图7。

T-SQL语句创建存储过程和触发器

T-SQL语句创建存储过程和触发器

《数据库原理及应用》实验报告实验过程:一、在student数据库上练习创建并调用课堂讲授的存储过程和触发器。

1.创建一个instead of触发器,要求实现一下功能:在t_student表上创建一个删除类型的触发器notallowdelete,当上除记录时,显示不允许删除的提示信息use studentsgoif exists(select name from sysobjectswhere name='notallowdelete' and type='tr')drop trigger notallowdeletegoCREATE trigger notallowdeleteon t_studentinstead of deleteasprint'notallowdelete触发器开始执行……'print'不能执行删除操作!'2.创建一个after触发器,要求实现一下功能:在t_student表上创建一个删除类型的触发器studelete,当在t_studen t表中删除某一条记录后,在t_score表中删除与此学号对应的记录。

use studentsgoif exists(select name from sysobjectswhere name='studelete' and type='tr')drop trigger studeletegoCREATE trigger studeleteon t_studentfor deleteasprint'notallowdelete触发器开始执行……'declare @stunum char(10)print'把在t_student中删除记录的学号赋值给@stunum'selete @stunum=s_numberfrom deletedprint'开始查找并删除t_score中的相关记录……'delete from t_scorewhere s_number=@stunumprint'删除了t_score中学号为'+rtrim(@stunum)+'的记录'3.使用T_SQL语句创建一个insert触发器,功能是:当在t_score表中插入或修改s_number时,检测t_student中是否存在相应值,不存在给出信息,否则操作成功。

T-SQL语言:数据定义与操纵、编程操作;连接、视图、存储过程、触发器

T-SQL语言:数据定义与操纵、编程操作;连接、视图、存储过程、触发器

实验三T-SQL语言:数据定义与操纵、编程操作;连接、视图、存储过程、触发器一、实验目的1.掌握利用T-SQL语言进行数据定义、数据操纵的方法。

2.掌握利用T-SQL语言编程的技巧和方法。

3掌握利用T-SQL语言进行数据连接、视图的定义。

4掌握利用T-SQL语言定义存储过程、触发器。

5加深T-SQL语言编程的技巧和方法的掌握。

二.实验平台1.操作系统:Windows 2000 或者Windows XP。

2.数据库管理系统:SQL server 2000 个人版。

三、实验内容1.利用T-SQL语言建立若干个表(教材P75的表)。

(Transact-SQL是Microsoft SQL Server提供的一种结构化查询语言)2.利用T-SQL语言插入相应的数据。

3.编程实现如下操作:1)求供应工程J1零件的供应商号码;2)求供应工程J1零件P1的供应商号码;3)求供应工程J1零件为红色的供应商号码。

4利用实验建立的表,建立关于工程项目相关的视图,包括项目号、采用零件号、零件名、供应商。

5建立查询上述内容的存储过程。

6建立在表J加入新项目号时,自动在其它相关的表中插入新项目号。

四、实验过程1.新建一个SPJ数据库,打开SQL查询分析器,利用T-SQL语言按照教材P74习题5的要求建立相应的表。

2.向表中插入数据,例如:InsertInto SPJValues (’s1’,’p1’,’j1’,’200’)3.1) SELECT DISTINCT SNOFROM SPJWHERE JNO='J1';2) SELECT DISTINCT SNOFROM SPJWHERE JNO='J1'AND PNO='P1';3) SELECT DISTINCT SNOFROM SPJ,PWHERE JNO='J1' AND P.PNO=SPJ.PNO AND COLOR='红';4create view GCXMASSELECT J.JNO,P.PNO,PNAME,SNAMEFROM S,P,J,SPJWHERE J.JNO=SPJ.JNO ANDP.PNO=SPJ.PNO ANDS.SNO=SPJ.SNOWITH CHECK OPTION视图的建立5.利用企业管理器将上述SQL语言填写入即可。

数据库上机实验(编写存储过程访问数据库)

数据库上机实验(编写存储过程访问数据库)

课程实验报告课程名称实验名称实验4:编写存储过程访问数据库实验目的及要求1.熟悉使用存储过程来进行数据库应用程序的设计。

实验环境操作系统:Windows DBMS:SQL Server 2005实验内容创建关系模式SCSC(sno varchar(10) 主键,Student表的外键, cno varchar(5) 主键,Course表的外键, score int,newscore varchar(1))一开始SC表中的前3列是有数据的,newgrade列全部是空的1.编写存储过程将学生选课成绩(百分制)转换成等级制(即A、B、C、D、F),要求使用游标完成其中,A:90~100B:80~89C:70~70D:60~69F:0~592.执行该存储过程,使得newgrade列中为各等级。

调试过程及实验结1.创建Student、Course表果2.创建关系模式SC及表3.使用游标完成等级转换)总结本次试验涉及关系模式和游标的使用等问题,思路比较模糊,看了一阵书才开始做,先是使用了游标的SQL语句EXEC SQL,结果发现不可以,又尝试用了存储过程的语句可以了,实验过程中还遇到过一些细小的问题,经过一系列的调试终于成功了,这次实验发现自己对教材知识的理解还不够好,导致在做实验时比较困难,所以以后还需要经常复习相关的知识点,并做到熟练使用。

附录1.创建Student、Course表CREATE TABLE Student(Sno varchar(10) PRIMARY KEY, Sname CHAR(20) UNIQUE,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20));CREATE TABLE Course(Cno varchar(5) PRIMARY KEY,Cname char(40),Cpno char(4),Ccredit SMALLINT,);2.创建关系模式SC及表SCCREATE SCHEMA "SC" AUTHORIZATION guestCREATE TABLE SC(Sno varchar(10) ,Cno varchar(5) ,PRIMARY KEY(Sno,Cno),FOREIGN KEY (Sno) REFERENCES Student(Sno),FOREIGN KEY (Cno) REFERENCES Course(Cno),score int,newscore varchar(1))3.建立存储过程exchangeCREATE PROCEDURE exchangeASBEGIN DECLARE@sno varchar(20),@cno varchar(20),@newscore varchar(1),@score intDECLARE ex CURSOR FORSELECT Sno,Cno, NewScore, ScoreFROM SCOPEN exFETCH exINTO @sno,@cno, @newscore, @scoreWHILE(@@FETCH_STATUS=0)BEGINIF @score<100 SET @newscore='A'ELSE IF @score<90 SET @newscore='B'ELSE IF @score<80 SET @newscore='C'ELSE IF @score<70 SET @newscore='D'ELSE IF @score<60 SET @newscore='F'UPDATE SC SET NewScore=@newscoreWHERE Sno=@sno and Cno=@cnoFETCH exINTO @Sno,@Cno,@Score,@NewScore ENDCLOSE exDEALLOCATE exEND4. 执行存储过程exchangeEXECUTE exchange。

实验报告5 数据库编程存储过程

实验报告5 数据库编程存储过程

实验5:数据库编程——存储过程一.实验目的通过本实验使学生掌握存储过程的基本概念和创建、执行、删除方法。

二.实验类型验证型三.实验学时2学时四.实验原理及知识点1.Transact-SQL编程2.存储过程的创建和执行3.存储过程的修改和删除五.实验环境1.硬件设备要求:PC及其联网环境;2.软件设备要求:Windows操作系统;MS SQL Server数据库管理系统。

六.实验内容及步骤利用存储过程实现下面的应用:从账户1转指定数额的款项到账户2中。

假设账户关系表为Account(Accountnum,total)存储过程create procedure pro_transfer(@inAccount int,@outAccount int,@amount float)asdeclare@totalDepositOut float,@totalDepositIn float,@inAccountnum int;beginselect@totalDepositOut=(select total from Account where accountnum =@outAccount);if (@totalDepositOut is null)beginrollback;return;endif (@totalDepositOut<@amount)beginrollback;return;endselect@inAccount=(select accountnum from Account where accountnum =@inAccount)if(@inAccountnum is null)beginrollback;return;endupdate Account set total=toal-@amountwhere accountnum=@outAccount;update Account set total=total+@amountwhere accountnum=@inAccount;commit;end七.实验总结通过这次实验学会写简单的存储过程,了解了在sql server 2008中的存储过程的基本语法,发现存储过程的语法和pascal有很大的相似之处,不过sql server 2008的语法和书上的语法有很大的不同,只能自己去网上找资料,不过这锻炼了我的自学能力,不过就写一个存储过程还是有很多不够,还是要勤加练习。

数据库应用实验报告T-SQL编程

数据库应用实验报告T-SQL编程

内蒙古工业大学信息工程学院实验报告课程名称:数据库应用实验名称: T-SQL编程实验类型:验证性□ 综合性□ 设计性□实验室名称:九楼机房班级:学号:姓名:组别:同组人:成绩:实验日期:预习报告成绩:指导教师审核(签名):年月日预习报告一、实验目的1.掌握用户自定义类型的使用;2.掌握变量的分类及其使用;3.掌握各种运算符的使用;4.掌握各种控制语句的使用;5.掌握系统函数及用户自定义函数的使用。

二、实验内容1.自定义数据类型的使用(1)对于实验1给出的数据库表结构,自定义1个数据类型ID—type,用于描述员工编号。

在查询分析器编辑窗口输入如下程序并执行:USE YGGLEXEC sp_addtype’ID_type’,‘char(6)’,’not null’GO注意:不能漏掉单引号。

(2)重新创建YGGL数据库的Employees表。

在查询分析器编辑窗口输入如下程序并执行: USE YGGLIF EXISTS(SELECT name FROM sysobjectsWHERE type=‘U’and name='Employees’)DROP table employees/*首先在系统表中查看EmployeeS表是否存在,若存在,删除该表CREATE TABLE Employees( EmployeelD ID_type,/*定义字段EmployeelD的类型为ID_typeName char(10)NOT NULL.Birthday datetime NOT NULL.Sex bit NOT NULL.Address char(20)NOT NULL.Zip char(6)NULL,PhoneNumber char(12)NULL,EmailAddree char(20)NULL,DepartmentlD char(3)NOT NULL)GO【思考与练习】编写如下程序:(1)自定义1个数据类型,用于描述YGGL数据库中的DepartmentlD宁段,然后编写代码重新定义数据库的各表。

实验六使用T-SQL编写存储过程访问数据库

实验六使用T-SQL编写存储过程访问数据库

一实验目的1. 理解存储过程的概念、使用方式;2. 熟悉使用T-SQL编写存储过程来进行数据库应用程序的设计。

二实验工具SQL Server 2005利用SQL Server 2005 SSMS及其SQL查询编辑器,使用T-SQL编写存储过程。

三实验内容和要求建立学生-课程数据库,其中包含学生表Student(Sno,Sname,Ssex,Sage,Sdept)、课程表:Course(Cno,Cname,Cpno,Ccredit)和学生选课表:SC(Sno,Cno,Grade);编写相应的存储过程,完成下面的功能:(1)编写一个存储过程,可以查询指定系的学生的选课信息,列出学号、姓名、所在系、课程名和成绩等内容。

调用该存储过程,测试执行结果。

(2)编写一个存储过程,返回指定课程的平均分。

调用该存储过程,测试执行结果。

(3)编写一个存储过程,可以查询指定系指定成绩等级的学生的选课信息,列出学号、姓名、所在系、课程名和成绩等内容。

调用该存储过程,测试执行结果。

(成绩等级为优、良、中、及格、不及格,其中成绩在90分到100分之间为‘优’,在80分到89分之间为‘良’,在70分到79分之间为‘中’,在60分到69分之间为‘及格’,在0分到59分之间为‘不及格’。

)要求:提交创建存储过程的SQL脚本,并标识必要的注释。

保证程序能够正确编译和运行,并有相应的测试代码。

四实验报告4.1 实验环境:4.2 实验内容与完成情况:create database zhangsy--Drop database zhangsygouse zhangsy--创建三个表,分别是学生表,课程表和学生选课表;CREATE TABLE Student (Sno char( 10 )PRIMARY KEY,Sname char( 10 )NOT NULL,Ssex char(2)CHECK(Ssex ='男'OR Ssex ='女'),Sage tinyintCHECK(Sage >= 15 AND Sage <=45),Sdept char(20 )DEFAULT'计算机系')goCREATE TABLE Course (Cno char(4)NOT NULL,Cname char(20)NOT NULL,Ccredit tinyint CHECK(Ccredit > 0),Period int CHECK(Period > 0),PRIMARY KEY(Cno))goCREATE TABLE SC (Sno char(10)NOT NULL,Cno char(4)NOT NULL,Grade tinyint,CHECK(Grade >= 0 and Grade <= 100),PRIMARY KEY( Sno, Cno ),FOREIGN KEY( Sno )REFERENCES Student ( Sno ),FOREIGN KEY( Cno )REFERENCES Course ( Cno ))go--分别向这三个表中插入数据;Insert into student values('2006010101','张扬','男',19,default) Insert into student values('2006010102','李勇','男',21,default) Insert into student values('2006010103','王小','男',20,'数学系') Insert into student values('2006010104','赵娣','女',18,'外语系') Insert into student values('2006010105','刘柳','女',19,'外语系') goupdate student set sname='王小'where sno='2006010103'select*from studentgoInsert into Course values('J001','TC',2,32)Insert into Course values('J002','VB',2,32)Insert into Course values('J003','VC',2,32)Insert into Course values('J004','计算机文化基础',2,32) goselect*from coursegoInsert into SC values('2006010101','J001',85)Insert into SC values('2006010101','J002',80)Insert into SC values('2006010101','J003',78)Insert into SC values('2006010101','J004',90)Insert into SC values('2006010102','J001',75)Insert into SC values('2006010102','J002',60)Insert into SC values('2006010102','J003',77)Insert into SC values('2006010102','J004',92)Insert into SC values('2006010103','J001',85)Insert into SC values('2006010103','J003',90)Insert into SC values('2006010104','J004',89)Insert into SC values('2006010105','J004',76)Goselect*from scGo--查询课程的平均分create procedure sp_avggrade@cname varchar(20)='TC',@avg int outputasselect @avg=avg(grade)from sc,coursewhere o=o and ame =@cnameif @avg=0print'没有学生选此门课'elsereturn @avggoDeclare @avgGrade intEXECUTE sp_avggrade @avg=@avgGrade OutputPRINT @avgGradeDeclare @avgGrade intEXECUTE sp_avggrade 'VB',@avg=@avgGrade OutputPRINT @avgGradeDeclare @avgGrade intEXECUTE sp_avggrade 'VC',@avg=@avgGrade OutputPRINT @avgGradeDeclare @avgGrade intEXECUTE sp_avggrade '计算机文化基础',@avg=@avgGrade OutputPRINT @avgGrade--查询指定系的学生的学号,姓名,所在系,课程名和成绩Create Procedure sp_DispSC_Sdept@sdept varchar(20)='计算机系'ASSelect S.sno, S.sname, S.Sdept, ame, SC.gradeFrom Student SLeft Join SC on S.sno=SC.snoLeft Join Course C on o=owhere Sdept=@sdeptGoEXECUTE sp_DispSC_SdeptEXECUTE sp_DispSC_Sdept '信息系'EXECUTE sp_DispSC_Sdept @sdept='数学系'10-3----查询指定系,指定成绩等级的学生的学号,姓名,所在系,课程名和成绩Create Procedure sp_DispSC_Dept_Level@sdept varchar(20)='计算机系',@GradeLevel varchar(6)ASDeclare @SQLText varchar(200),@GradeStr varchar(30)Set @SQLText='Select S.sno, S.sname, S.Sdept, ame, SC.grade From Student S Left Join SC on S.sno=SC.sno Left Join Course C on o=o' Set @GradeStr=CaseWhen @GradeLevel='优'then'between 90 And 100'When @GradeLevel='良'then'between 80 And 89'When @GradeLevel='中'then'between 70 And 79'When @GradeLevel='及格'then'between 60 And 69'When @GradeLevel='不及格'then'between 0 And 59'When @GradeLevel IS NULL then'IS NULL'Else'LevelError'endIF @GradeStr='LevelError'print'错误:输入的成绩等级不符合要求!'ElseExecute(@SQLText+' where Sdept='''+@sdept +''' And Grade'+@GradeStr)GOEXECUTE sp_DispSC_Dept_Level @GradeLevel='优'Execute SP_DispSC_Dept_Level '信息系','优'EXECUTE sp_DispSC_Dept_Level default, @GradeLevel='优'4.3 出现的问题:在调用查询课程的平均分的存储的时候出现了问题,提示@avg没有赋值4.4 解决方案(列出遇到的问题和解决办法,列出没有解决的问题):命名一个对象@avgGrade把@avg传给它就可以得到结果。

数据库原理实验报告-T-SQL编程

数据库原理实验报告-T-SQL编程

数据库原理实验报告-T-SQL编程本次实验主要通过T-SQL编程学习数据库操作语言,包括基本的表格操作、数据查询、以及高级的存储过程和触发器编程。

1. 创建表格首先,我们需要创建一些表格来存储数据。

使用CREATE TABLE语句可以创建一个新的表格,语法如下:```sqlCREATE TABLE table_name (column1 datatype1,column2 datatype2,column3 datatype3,.....);```其中,table_name为所创建的表格的名称,column1, column2, column3为表格中的列名,datatype1, datatype2, datatype3为列的数据类型。

例如,以下为创建一个名为“students”的表格,并包含学生的姓名、性别和年龄:2. 插入数据```sqlINSERT INTO students (name, gender, age)VALUES ('Tom', 'male', 20);```3. 更新和删除数据使用UPDATE语句可以更新表格中的数据,语法如下:其中,table_name为要更新的表格名称,SET语句用于设置要更新的列名和对应的值,WHERE语句用于指定要更新的数据行。

例如,以下为将名为“Tom”的学生年龄更新为25岁:```sqlDELETE FROM table_name WHERE condition;```4. 查询数据5. 存储过程存储过程是一种预先定义好的程序,它包含了一组SQL语句,可以在需要时对存储过程进行调用。

使用CREATE PROCEDURE语句可以创建一个新的存储过程,语法如下:其中,procedure_name为所创建的存储过程名称,SQL statements为存储过程中的SQL语句。

例如,以下为创建一个名为“get_students”的存储过程,并查询所有学生数据:```sqlCREATE PROCEDURE get_studentsASBEGINSELECT *FROM students;END;```使用EXECUTE语句可以执行存储过程,语法如下:```sqlEXEC procedure_name;```例如,以下为执行名为“get_students”的存储过程:6. 触发器触发器是一种特殊的存储过程,它在特定的事件发生时自动执行。

实验五:T-SQL与存储过程

实验五:T-SQL与存储过程

实验五:T-SQL与存储过程实验五:T-SQL与存储过程一、实验目的1、了解创建存储过程的T-SQL语句的基本语法2、掌握使用界面操作方式和命令方式创建存储过程的方法和步骤3、掌握存储过程的使用方法二、实验平台和实验工具Window 7、SQL Server 2008三、实验相关知识1、SQL SERVER支持五种类型的存储过程:系统存储过程、本地存储过程、临时存储过程、远程存储过程和扩展存储过程。

其中,系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。

系统存储过程定义在系统数据库master中,其前缀是sp_。

本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操作任务,不能以sp_为前缀。

2、只能在当前数据库中创建存储过程。

3、创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。

4、创建存储过程的T-SQL语句CREATE PROC[EDURE] 存储过程名称[{ @参数名称数据类型}] [,…n][WITH{ RECOMPILE|ENCRYPTION }]ASSQL语句序列说明:(1) RECOMPILE表明每次运行该过程时,将其重新编译。

(2) ENCRYPTION表示 SQL SERVER 加密SYSCOMMENTS表中包含 CREATE PROCEDURE语句文本的条目。

注:必须将CREATE PROCEDURE语句放在单个批处理中。

成功执行CREATE PROCEDURE语句后,存储过程存储在sysobjects系统表中。

5、执行存储过程●EXEC[UTE] @返回值=存储过程名称参数值6、查看存储过程●查看存储过程的文本信息:SP_HELPTEXT 存储过程名●查看存储过程的一般信息:SP_HELP 存储过程名●查看存储过程的相关信息:SP_DEPENDS 存储过程名7、编辑修改存储过程●ALTER PROCEDURE 存储过程名称[{ @参数名称数据类型}][,…n][WITH{ RECOMPILE|ENCRYPTION }]ASSQL语句序列说明:各参数含义与CREATE PROCEDURE命令相同。

SQL存储过程

SQL存储过程

实验五:存储过程
一、实验目的
1.通过实验掌握存储过程的建立和使用,以及存储过程中参数的使用及作
用。

二、实验学时
2学时
三、实验前的准备
1.附加实验三完成的Library数据库
2.熟悉存储过程的创建和使用的方法
四、实验内容及步骤
一:对无参存储过程的创建和使用
在library数据库中创建一个存储过程proc_nopara,实现输出指定读者“李晨”的借阅读书的次数、未归还的图书数目和超期的图书名和借阅日期
调用该存储过程,给出运行后的结果。

二:对带输入参数的存储过程的创建和使用
在library数据库中创建一个存储过程proc_inpara,实现查询给定“出版社名称”的图书的总的图书数量和总的借阅数量,
调用该存储过程,假设给定的参数为“人民教育出版社”,给出运行后的结果。

三:对带输出参数的存储过程的创建和使用
在study数据库中创建一个存储过程proc_outpara,实现由调用程序通过输入参数给定出版社名称,通过变参(输出参数)返回该出版社的的图书的总的图书数量和总的借阅数量,
,如果给定的出版社名称不存在,则返回图书数量和总的借阅数量为-1.
调用该存储过程后(假设给定的出版社名称为:人民教育出版社),给出变参的结果(图书的总的图书数量和总的借阅数量)。

如果给定的出版社名称为:人民出版社,运行结果又是什么?
完成实验报告
实验报告学号:姓名:成绩:。

数据库原理-实验6-使用T-SQL编写存储过程访问数据库

数据库原理-实验6-使用T-SQL编写存储过程访问数据库

数据库原理-实验6-使⽤T-SQL编写存储过程访问数据库⼀、实验⽬的:1.理解存储过程的概念及特点;2.理解存储过程的作⽤;3.掌握使⽤界⾯⽅式和T-SQL⽅式定义存储过程的⽅法;4.掌握存储过程访问数据库的⽅法和意义⼆、实验环境SQL Server2008三、实验学时2学时四、实验原理1.存储过程的创建创建存储过程的语句是CREATE PROCEDURE或CREATE PROC,两者同义。

语法格式: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 ] /*执⾏的操作*/ | EXTERNAL NAME assembly_name.class_name.method_name}[;]其中:::=[ ENCRYPTION ][ RECOMPILE ][ ]2.存储过程的执⾏通过EXECUTE或EXEC命令可以执⾏⼀个已定义的存储过程,EXEC是EXECUTE 的简写。

语法格式:[ { EXEC | EXECUTE } ]{ [ @return_status = ]{ module_name [ ;number ] | @module_name_var }[ [ @parameter = ] { value| @variable [ OUTPUT ]| [ DEFAULT ]}] [ ,...n ][ WITH RECOMPILE ]}[;]3.存储过程的删除当不再使⽤⼀个存储过程时,就要把它从数据库中删除。

T-Sql存储过程

T-Sql存储过程

T-Sql存储过程(Procedure)今天讲下T-sql语法中存储过程的用法,我们一开始学习数据库语言的时候就是用一些简单的insert,select等语法,但是随着我们学习数据库的深入,就会发现一些简单的语法满足不了我们的要求,比如处理一些业务逻辑,多表关联的时候,还有就是虽然程序或是简单的sql语句也会实现其效果,但是性能或是效率会很低。

这时候我们就会用到T-sql中的存储过程,存储过程就像C#中的方法一样,传递参数,执行一些操作,返回相应的值。

我们用SQLSERVER2008自带的AdventureWorks示例数据库来讲解。

首先我们新建一个存储过程,关键字为Procedure,示例代码:?1 2 3 4 5 create procedure proc_Sales_SalesReasonasbeginselect * from Sales.SalesReason;end我们新建的一个proc_Sales_SalesReason存储过程,执行查询操作,一般存储过程命名为proc_+名称,这样有利于识别。

执行存储过程示例代码:?1 2 3 execute proc_Sales_SalesReasondrop procedure proc_Sales_SalesReason --删除存储过程修改存储过程的话用alter关键字。

以上只是简单的存储过程,就想无参数的方法一样,下面是带参数的示例代码:?1 2 3 4 5 6 7 8 9 10create procedure proc_Sales_SalesReason(@SalesReasonID int,@Name nvarchar(50),@ReasonType nvarchar(50),@ModifiedDate datetime)asbegininsert into Sales.SalesReason(SalesReasonID, Name, ReasonType, ModifiedDate) values(@SalesReasonID, @Name, @ReasonType, @ModifiedDate);end这是一个执行插入数据的存储过程,执行示例代码:?1 execute proc_Sales_SalesReason 100,'text1','as','2011-12-12';以上讲解的都是一些简单存储过程的用法,在这里只是起到抛砖引玉的作用,大家可以有时间好好研究下,去处理一些复杂的业务逻辑。

数据库操作和T-SQL的使用

数据库操作和T-SQL的使用

数据库操作和T-SQL的使⽤数据库操作使⽤T-SQL语句创建信息库create database studDB --⾸先创建数据库的名字On primary(--主数据⽂件name='StudDB_data',--主数据⽂件名字后年需加‘_dat或_data’后缀filename='e:\dujian\studDB_data.mdf', --主数据⽂件保存的地址,在⽂件后要加“.mdf”的后缀size=10mb, --这个是主数据⽂件的初始化数据maxsize=unlimited,(⽆限定) --最⼤增长值(可以⾃⼰设置MB 或者%)filegrowth=20% --按百分⽐增长,(也可以按多少MB增长)),--要加逗号辅助数据⽂件(name='studDB_data1',filename='e:\dujian\studDB_data.ndf', --辅助数据⽂件的保存地址,在⽂件后⾯要加.ndf的后缀size=3MB,maxsize=100mb,filegrowth=20%)--⽇志⽂件log on(name='studDB_log', --⽇志⽂件⽂件名后需要加“_log”filename='e:\dujian\studDB_log.ldf',--⽇志⽂件保存的地址,在⽂件后加.ldf后缀。

size=3MB,maxsize=30mb,filegrowth=10%)管理数据库使⽤T-SQL查看(sp_helpdb database_data)sp_helpdb studDB删除数据库(dorp database)dorp database studDB添加数据(或者辅助⽂件)⽂件,并添加到⽂件组FG2当中。

(add file)(to filegroup ⽂件)alter database studDBadd file(name=studDB_data,filename='studDB_data.ndf')to filegroup FG添加事务⽇志⽂件(add log file)alter database studDBadd log file(name=studDB_log,filename='e:\dujian\studDB_log.ldf')删除⽂件(remove file)alter database studDBremove file studDB_data(staudDB_log)更改⽂件属性(modify file)alter database studDBModify file(name=studDB_data,filename='e:\dujian\studDB_data(或者studDB_log)',size=10mb)删除⽂件组 (remove filegroup)alter database studDBremove file FP1分离数据库(exec sp_detach_db)exec sp_detach_db 'studDB','true'附加数据库(exec sp_attach-db )exec sp_attach-db @dbname='studDB',@filename1='e:\dujian\studDB_data.mdf',@filename='e:\dujian\studDB_log.ldf' 收缩数据库{dbcc shrinkdatabase database,数字 }dbcc shrinkdatabase studDB,50收缩数据库⽂件(dbcc shriinkfile file,数字)dbcc shrinkfile studDB_data,1。

数据库系统概论实验指导(第六版)

数据库系统概论实验指导(第六版)

数据库系统概论实验指导(第六版)计算机学院2010/09改版履历目录目录 (3)1.实验概要 (4)1.1.实验说明 (4)1.2.实验环境和配置 (4)1.3.上机要求 (4)2.实验1:数据库/表的基本操作和表级约束 (5)2.1.目的和要求 (5)2.2.实验准备 (5)2.3.实验内容 (5)3.实验2:库级约束和基本表的数据操作 (8)3.1.目的和要求 (8)3.2.实验准备 (8)3.3.实验内容 (8)4.实验3:视图操作和安全性控制 (10)4.1.目的和要求 (10)4.2.实验准备 (10)4.3.实验内容 (10)5.实验4:存储过程/触发器/ODBC数据库编程 (12)5.1.目的与要求 (12)5.2.实验准备 (12)5.3.实验内容 (12)6.实验5:数据库综合实验 (14)6.1.目的与要求 (14)6.2.实验准备 (14)6.3.实验内容 (14)5.3.1.题目一:零件交易中心管理系统 (15)5.3.2.题目二:图书管理系统 (15)5.3.3.题目三:民航订票管理系统 (15)5.3.4.题目四:学生学籍管理系统 (15)5.3.5.题目五:车站售票管理系统 (16)5.3.6.题目六:企业人事管理系统 (16)5.3.7.题目七:电话交费管理系统 (16)5.3.8.题目八:医药销售管理系统 (16)7.附录:实验报告格式 (17)1.实验概要1.1.实验说明内容:本课程实验分5次完成,每次完成一部分。

具体内容参考本指导的后半部分。

成绩:每次实验100分,最后取所有实验的平均分作为实验的总成绩。

评分标准如下:上述每一项按照百分制给出分值,最后按照比率计算每次实验的最终成绩。

实验报告每次实验需提交电子版的实验报告(最后一次实验需提交设计文档,源程序等相关资料)。

每次实验结束时,将写好的实验报告,提交给各班辅导老师。

如果确有困难没有完成的情况下,课后自己完成之后提交到辅导老师的邮箱里。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五使用T-SQL编写存储过程访问数据库
【目的与要求】
熟悉使用存储过程来进行数据库应用程序的设计。

【实验设备与环境】
在实验一中安装的SQL SERVER 2008及其T-SQL执行引擎。

【实验内容】
对学生-课程数据库,编写存储过程,完成下面的功能:
(1)统计某课程(如离散数学)的成绩分布情况,即按照各分数段统计人数;
(2)统计任意一门课的平均成绩。

要求:提交源程序并表示必要的注释。

保证程序能正确编译和运行并截取程序执行结果图。

附:实验内容(1)参考程序
create procedure p_satscore @cno char(4) --course number
as
begin
declare @score1 int
declare @score2 int
declare @num int
declare @cname varchar(10) --course name
set @cname=(select cname from course where cno=@cno)
print '<'+@cname+'>'+'考试成绩按照分数段统计情况'
set @score1='100'
set @score2='90'
while(@score1>=0)
begin
set @num=(select count(*) from sc where cno=@cno and grade between @score2 and @score1)
print str(@score2)+'至'+str(@score1)+'分人数为'+str(@num) set @score1=@score2-1
if @score1>=60
set @score2=@score2-10
else
set @score2=0
end
end。

相关文档
最新文档