diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.26 \345\255\230\345\202\250\350\277\207\347\250\213.txt" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.26 \345\255\230\345\202\250\350\277\207\347\250\213.txt" new file mode 100644 index 0000000000000000000000000000000000000000..9ae698d9c5e607f52fbffe62779e6364a49cb0cb --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.26 \345\255\230\345\202\250\350\277\207\347\250\213.txt" @@ -0,0 +1,91 @@ +1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 + +go +create proc p1 +as +select top 1 b.CardNo,(select RealName from AccountInfo a where a.AccountId = b.AccountId) as RealName,b.CardMoney from BankCard b +order by CardMoney +go +exec p1 +2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 + +go +create proc p2 +@CardNo varchar(30), +@CardMoney money +as +update BankCard set CardMoney += @CardMoney +insert into CardExchange values(@CardNo,@CardMoney,0,getdate()) +go +exec p2 '6225125478544587',2000 +select * from CardExchange c +select * from BankCard b + +3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 + +go +create proc p3 +@CardNo varchar(30), +@CardMoney money +as +if @CardMoney<(select b.CardMoney from BankCard b where b.CardNo = @CardNo) + begin + update BankCard set CardMoney -= @CardMoney + insert into CardExchange values(@CardNo,0,@CardMoney,getdate()) + return 1 + end +else + begin + return -1 + end +go +declare @f int +exec @f = p3 '6225125478544587',100 +print @f +select * from CardExchange c +select * from BankCard b + +4. 查询出某时间段的银行存取款信息以及存款总金额,取款总金额,传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 + +go +create proc p4 +@k datetime, +@j datetime, +@MoneyInBank money output, +@MoneyOutBank money output +as +select * from CardExchange c +where c.ExchangeTime between @k and @j +select @MoneyInBank = sum(c.MoneyInBank) ,@MoneyOutBank = sum(c.MoneyOutBank) from CardExchange c +go +declare @MoneyInBank money +declare @MoneyOutBank money +exec p4 '2022-09-20','2022-09-27',@MoneyInBank output,@MoneyOutBank output +print '存款总金额'+ convert(varchar(20),@MoneyInBank) + '取款总金额'+ convert(varchar(20),@MoneyOutBank) +select c.MoneyOutBank from CardExchange c +select * from BankCard b + +5. 密码升级,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码 + +go +create proc p5 +@CardNo varchar(30), +@CardPwd varchar(10) +as +if @CardPwd=(select b.CardPwd from BankCard b where b.CardNo = @CardNo) + begin + while len(@CardPwd)<8 + begin + set @CardPwd += convert(varchar(10),round(rand()*9,0)) + end + update BankCard set CardPwd = @CardPwd where CardNo = @CardNo + end +else +begin + print '密码错误' +end +go +drop proc p5 +exec p5 '6225125478544587','123456' +select * from BankCard b +update BankCard set CardPwd = '123456' \ No newline at end of file diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.27 \350\247\246\345\217\221\345\231\250.txt" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.27 \350\247\246\345\217\221\345\231\250.txt" new file mode 100644 index 0000000000000000000000000000000000000000..22382c5986c97e4ee202d99378e42da9010e5466 --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.27 \350\247\246\345\217\221\345\231\250.txt" @@ -0,0 +1,57 @@ +(1)假设有部门表和员工表,在添加员工的时候,该员工的部门编号如果在部门表中找不到,则自动添加部门信息,部门名称为"新部门"。 +go +create trigger tri_p1 +on people after insert +as + begin + declare @A varchar(20),@B varchar(20) + select @A=DepartmentId from inserted + select @B='新部门' + insert into Department values(@A,@B) + end + +insert into People values('005','李四','女',1000) + +(2)触发器实现,删除一个部门的时候将部门下所有员工全部删除。 +go +create trigger tri_p2 +on Department after delete +as + begin + declare @A varchar(20) + select @A=DepartmentId from deleted + delete from People where DepartmentId=@A + end + +delete from Department where DepartmentId='005' + +(3)创建一个触发器,删除一个部门的时候判断该部门下是否有员工,有则不删除,没有则删除。 +go +create trigger tri_p3 +on Department instead of delete +as + begin + declare @A varchar(20),@B int + select @A=DepartmentId from deleted + select @B=COUNT(DepartmentId) from People where Departmentid=@A + if @B=0 + begin + delete from Department where DepartmentName=@A + end + end + +delete from Department where Departmentid='002' + + select * from Department + select * from People + +(4)修改一个部门编号之后,将该部门下所有员工的部门编号同步进行修改 +go +create trigger tri_p4 on Department +after update +as + update People set DepartmentId = (select DepartmentId from inserted) + where DepartmentId = (select DepartmentId from deleted) +go + +update Department set DepartmentId='009' where DepartmentId='001' \ No newline at end of file