急,急,急,一个关于SQL Server应用问题,谁给我满意的回答我绝不会吝啬给100分
已知学生数据库中存放了这样的两张表,如下所示,
一张为毕业生信息表,记录毕业生的一些基本信息,
一张为学生敫
费表,记录了学生的敫费信息,由于学生毕业,我
们要从学生信息表中把毕业生的记录删除,但是如
果这个学生欠费的话,则不允许删除这个学生的记
录,要求:删除毕业生信息表中的那条记录,必须
通过存储过程实现,并带有输入参数,而判断该学
生是否欠费,必须使用触发器实现。
毕业生信息表
学号 姓名 性别 地址 联系方式
001 吴迪 男 淮南市潘集镇超前村18号 0554-6840157
002 潘婧萍 女 抚湖市繁昌县孙村镇65号 0553-4855986
003 余建星 男 黄山市翁县北岸镇52号 0559-7852013
004 贺艳 女 蚌埠市长淮卫镇上村85号 0552-6589421
学生缴费表
学号 姓名 已交费用 欠费
001 吴迪 5000 400
002 潘婧萍 5400 0
003 余建星 4000 1400
004 贺艳 3000 2400
------解决方案--------------------create table 毕业生信息表(学号 varchar(10), 姓名 varchar(10), 性别 varchar(10), 地址 varchar(50), 联系方式 varchar(50))
insert 毕业生信息表 select '001 ', '吴迪 ', '男 ', '淮南市潘集镇超前村18号 ', '0554-6840157 '
union all select '002 ', '潘婧萍 ', '女 ', '抚湖市繁昌县孙村镇65号 ', '0553-4855986 '
union all select '003 ', '余建星 ', '男 ', '黄山市翁县北岸镇52号 ', '0559-7852013 '
union all select '004 ', '贺艳 ', '女 ', '蚌埠市长淮卫镇上村85号 ', '0552-6589421 '
create table 学生缴费表(学号 varchar(10), 姓名 varchar(10), 已交费用 int, 欠费 int)
insert 学生缴费表 select '001 ', '吴迪 ', 5000, 400
union all select '002 ', '潘婧萍 ', 5400, 0
union all select '003 ', '余建星 ', 4000, 1400
union all select '004 ', '贺艳 ', 3000, 2400
create proc del(
@学号 varchar(10)
)
as
if not exists(select 1 from 学生缴费表 where 学号=@学号 and 欠费> 0)
delete 毕业生信息表 where 学号=@学号
go
create trigger tr on 毕业生信息表
instead of delete
as
declare @学号 varchar(10)
select @学号=学号 from deleted
if not exists(select 1 from 学生缴费表 where 学号=@学号 and 欠费> 0)
delete 毕业生信息表 where 学号=@学号
go
------解决方案---------------------- 创建测试表
create table StudentInfo(学号 varchar(3),姓名 varchar(10),性别 char(2),地址 varchar(100),联系方式 varchar(100))
Go
-- 插入测试数据
insert StudentInfo select '001 ', '吴迪 ' , '男 ', '淮南市潘集镇超前村18号 ' , '0554-6840157 '
insert StudentInfo select '002 ', '潘婧萍 ' , '女 ', '抚湖市繁昌县孙村镇65号 ' , '0553-4855986 '
Go
create table StudentFee(学号 varchar(3),姓名 varchar(10),已交费用 int,欠费 int)
Go
insert StudentFee select '001 ', '吴迪 ',5000,400
insert StudentFee select '002 ', '潘婧