SQL Server 2008 数据库_实验五_SQL DDL 操作

版权声明:如需转载,请注明出处 https://blog.csdn.net/qq_36260974/article/details/85412465

SQL DDL 操作

什么是SQL DDL 操作?
  DDL是SQL定义语言,它主要包括三个关键字:create ,alter , drop(数据库关键字不分大小写),主要操作对象 有数据库、表、索引、视图等。
  
语句说明:

创建数据库   create database
修改数据库   alter database
删除数据库   drop database
创建表     create table
修改表     alter table
删除表     drop table
创建索引    create index
删除索引    drop index

实验的目的

  • 掌握存储过程和函数的创建和修改。
  • 掌握参数和返回值的设置
  • 学习用存储过程和函数解决实际问题
  • 了解动态SQL的应用
  • 掌握SQL的流程控制

实验内容与要求

在实验1、2创建的S、SC、C、T四个基本表的基础上,编写以下存储过程:

  1. 实现一个存储过程getTopResultByTbname,要求输入表名和要检索的结果数量n,检索该表的前n条记录。
    提示:查询的表不确定,需要用动态SQL,构造查询字符串
  2. 实现一个函数getRankBySnoAndCno,要求输入学生的学号和课程号,返回该生该门课的排名,要求如果输入的学号或课程号在SC表中不存在,则返回为-1。
    提示:可通过统计该门课中大于该生分数的学生数量来实现,或者用ROW_NUMBER()函数来实现
    思考:存储过程不支持返回值,如第2题用存储过程实现,如何返回排名的结果。

实验主要步骤

1、实现一个存储过程getTopResultByTbname,要求输入表名和要检索的结果数量n,检索该表的前n条记录。
在这里插入图片描述
源码:

Use Lesson --指向需要所操作的数据库Lesson
go
create procedure getTopResultByTbname
@tablename varchar(50),@n int 
as
begin
	declare @sql nvarchar(50),@count int
	set @sql = 'select top ' + cast(@n as varchar(50)) + '* from ' + @tablename
	execute sp_executesql @sql
end
exec getTopResultByTbname 'SC',3	--查询(前3)
drop procedure getTopResultByTbname --删除

2、实现一个函数getRankBySnoAndCno,要求输入学生的学号和课程号,返回该生该门 课的排名,要求,如果输入的学号或课程号在SC表中不存在,则返回为-1。
在这里插入图片描述
源码:

Use Lesson --指向需要所操作的数据库Lesson
go
create function getRankBySnoAndCno(@S# varchar(10),@C# varchar(10))returns int
as
	begin
		declare @sql nvarchar(50),@count int,@returnvalue int
		if exists(select *from SC where S#=@S# and C#=@C#)  
			begin
				set @count=(select count(*) from SC 
				where SCORE>(select SCORE from SC where S#=@S# and C#=@C#) and C#=@C#)
				set @returnvalue=@count+1
			end
		else
			set @returnvalue=-1
			return @returnvalue
	end	
go
--调用自定义函数:
select Lesson.dbo.getRankBySnoAndCno('s1','c2')

重要知识点:

存储过程和函数本质上是没有区别的。

  • 函数:只能返回一个变量的限制。
  • 存储过程:可以返回多个。
  • 同时函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。
    函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少
  1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
  2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
  3. 存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
  4. 当存储过程和函数被执行的时候,SQL Manager会到存储过程中去取相应的查询语句,如果在存储过程里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。 存储过程中保存的是执行计划,当编译好之后就执行存储过程中的执行计划,之后SQL SERVER会根据每个执行计划的实际情况来考虑是否要在存储过程中保存这个执行计划,评判的标准一个是这个执行计划可能被使用的频率;其次是生成这个执行计划的代价,也就是编译的耗时。保存在存储过程中的执行计划在下次执行时就不用再编译了。

如有错误,欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_36260974/article/details/85412465