数据库实验-sql存储过程

数据库实验-sql存储过程,第1张

CREATE PROCEDURE P1

@XH VARCHAR(10) AS

IF @XH NOT IN(SELECT 学号 FROM 选课) INSERT 选课 VALUES(@XH,'1',0)

ELSE IF NOT EXISTS(SELECT FROM 选课 WHERE 学号=@XH AND 成绩>=60)

DELETE FROM 选课 WHERE 学号=@XH

ELSE SELECT FROM 选课 WHERE 学号=@XH

先分析一下你所要完成的两个功能:

第一个功能:

1)、判断此部门是否有负责的项目

2)、当中需要找到除该部门以外的负责项目最少的部门:需要检索出各部门所负责项目数量,并从中选取出数量最小的部门,最小为零

3)、如果有多个部门负责项目数量相等且数量数字为最小,则选取排序中第一个项目数量最小的部门。

第二个功能:比较简单,只需要一个set语句即可,筛选条件是部门编号=被删除的部门编号

依次将以上各个细节用sql语句实现即可:

1)、判断此部门是否有负责的项目

假设删除的部门编号为:x

declare @num int

select @num=count() from project where where 负责部门号='x'

if @num<>0则是由负责项目部,则:select 编号 from project where 负责部门号='x',如果这个集合不为空,就需要用游标加上循环将这些项目部挪到负责项目最少的那个部门下面了。

if @num=0则是没有,则执行第二个功能:将员工移到制定部门。

2)、需要找到负责项目数量最小的那个部门

3)、如果有多个部门负责项目数量相等且数量数字为最小,则选取排序中第一个项目数量最小的部门:select top 1 部门编号,min(数量) from (select 负责部门编号 as 部门编号,count() as 数量 from project group by 负责部门编号) group by 部门编号,就这么一个意思;此时呢需要声明变量将此最小的部门编号记住,以便使用。

那个将员工转移至某个部门的就不再写了,很简单。

触发器本身就不再写了,再次只给出一个思路,希望有帮助。

表建得不合理,不符合数据库规范化要求,课程并不是由学号所决定了,课程可作为一个独立的表,还有,成绩是有学号和课程号共同决定的,因此成绩表也应该列出来作为一个独立的表。

应该分为3个表来建立数据库

1、学生信息表(学号,姓名,性别,出生日期,联系电话)

2、课表(课程号,课程名)

3、成绩表(学号,课程号,成绩)

期中学号是学生表的主键,课程号是课表的主键,学号和课程号组合是成绩表的主键,两者共同决定成绩。

拆分出来后,避免了数据冗余的问题,消除专递依赖!

完整性参照很简单,你自己解决吧。

仅能给出T-SQL,我这里没有sql2000,版本太古老了。

use master

go

if exists (select name from sysdatabases where name='company')

drop database company

go

--1建库

create database company on primary

(

name='company_data',

filename='D:\Data\company_datamdf',

size=5MB,

maxsize=15MB,

filegrowth=1MB

)

log on

(

name='company_log',

filename='D:\Data\company_logldf',

size=5MB,

maxsize=10MB,

filegrowth=1MB

)

go

--2改库

alter database company

add file

(

name='company2_data',

filename='D:\Data\company2_datandf',

size=1MB,

maxsize=5MB,

filegrowth=1MB

)

go

alter database company

modify file (name='company_log',size=15MB,filegrowth=2MB)

go

--3加组

alter database company

add filegroup TempGroup --contains filestream

go

alter database company

add file

(

name='company3_data',

filename='D:\Data\company3_datandf',

size=3MB,

maxsize=10MB,

filegrowth=1MB

)

to filegroup TempGroup

go

--4删文件

alter database company

remove file company2_data

go

--5删库

drop database company

go

--6默认库

create database company

/

好好学学sql server,oracle也不会,毕业后怎么找工作。

不要让别人看不起大学毕业生。

/

以上就是关于数据库实验-sql存储过程全部的内容,包括:数据库实验-sql存储过程、数据库实验 创建触发器、数据库实验报告等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9383544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存