《数据库技术与开发》工程实训指导书
(2) 插入数据表的测试数据(2学时)
使用T-SQL语句向每个表插入如下所示测试数据,要保证业务数据的一致性和完整性。
? BankBusinessType表的测试数据
使用T-SQL向已经创建的BankBusinessType表插入表7数据:
表21.BankBusinessType表测试数据
? BankCustomer表的测试数据
使用T-SQL语句向BankCustomer表中插入表8的数据:
表22.BankCustomer表测试数据
? BankCard表的测试数据
使用T-SQL语句向BankCard表中插入表9的数据,要求开户日期设置为当前日期近一个月的随机某一天(使用相应的日期函数和随机函数完成)。
扩展题:如何保证某卡号对应的交易日期必须晚于该卡的开户日期,建议增加相应的级联触发器。
表23.BankCard表测试数据
? BankDealInfo表的测试数据
使用T-SQL语句向BankDealInfo表中插入表10的数据,要求交易日期设置为当前日期近半个月的随机某一天(使用相应的日期函数和随机函数完成)。
通过检查相应账户余额,仔细检查上述建立的2个级联触发器是否发挥作用?
表24.BankDealInfo表测试数据
36
《数据库技术与开发》工程实训指导书
5、实训五:模拟常规业务
使用T-SQL语句实现银行的日常业务,并保存为item4.sql文件。 按下述推荐步骤,在4学时内完成下述实训内容: (1) 修改客户密码
根据卡号修改指定2个客户的银行密码,其中第一个客户1010 3576 1234 5678密码修改为123456,第二个客户1010 3576 1234 5688修改为123123,并使用Select查询语句显示如下效果图:
图15.修改客户密码效果图
(2) 办理银行卡挂失
卡号为1010 3576 1234 5678的银行卡丢失,申请挂失,要求使用inner join语句显示如下图运行结果:
图16.办理银行卡挂失效果图
(3) 统计银行资金流通余额和盈利结算
存入代表资金流入,支取代表资金流出。
计算公式:资金流通余额=总存入金额-总支取金额 假定存款利率为千分之三,贷款利率为千分之八。
计算公式:盈利结算=总支取金额*0.008-总存入金额*0.003。
要求创建一个存储过程proc_staticsBanlanceAndProfit,执行该存储过程运行结果如下图所示:
图17.统计银行资金流通余额和盈利结算
参考代码如下所示: if exists(select * from sysobjects where name='proc_staticsBanlanceAndProfit' )
37
《数据库技术与开发》工程实训指导书
......; go create procedure proc_staticsBanlanceAndProfit as declare @InMoney money ...... --获取总存入金额和总支取金额 select @InMoney=SUM(BDDealAcount) from BankDealInfo where rtrim(ltrim(BDDealType))='存入' ...... print '存入总金额:'+rtrim(ltrim(str(@InMoney)))+'RMB,支取总金额:' ...... go (4) 查询本周开户信息
查询本周开户的卡号,显示该卡的相关信息。结果如下图所示:
图18.本周开户信息
提示:
求时间差使用日期函数DateDiff(),求星期几使用日期函数DatePart(),账户状态列使用Case语句转换。
(5) 查询本月单次交易金额最高的卡号和总交易金额最高的卡号
查询本月存、取款中单次交易金额最高的卡号信息。结果如下图所示:
图19.本月交易金额最高的卡号
提示:要求使用子查询和distinct去掉重复的卡号,使用DateDiff()和DataPart()函数得到本月内的交易信息。 (6) 查询挂失客户
查询挂失账号的客户信息,分别利用子查询in的方式或者内部连接inner join,查询结果如下图所示:
图20.查询挂失客户
38
《数据库技术与开发》工程实训指导书
(7) 催款提醒业务
根据某种业务(如代缴电话费、代缴手机费或房贷等)的需要,每个月末,查询出客户账户上余额少于2000元,由银行统一致电催款。
查询结果如下图所示:
图21.催款提醒业务
利用子查询或者内部连接inner join均可,参考代码如下所示: select ...... from BankCard A inner join BankCustomer B Where ...... 6、实训六:创建、使用视图
使用T-SQL语句创建如下视图,并保存为item5.sql文件。 按下述推荐步骤,在4学时内完成下述实训内容:
为向客户提供友好的用户界面,使用T-SQL语句创建下面几个视图,并使用这些视图输出各表信息。
(1) 输出银行客户记录视图VW_userInfo
显示的列名全为中文,要求先判断该视图是否存在,若存在,则先删除。结果如下图所示:
图22.输出银行客户记录
(2) 输出银行卡记录视图VW_CardInfo
建议使用内部连接Inner Join语句,结果如下图所示:
图23.输出银行卡记录
(3) 输出银行卡交易记录视图VW_TransInfo 查询该视图,结果如下图所示:
39
《数据库技术与开发》工程实训指导书
图24.输出银行卡的交易记录
(4) 根据客户登录名查询该客户账户信息VW_OneUserInfo
根据客户登录名(采用实名制访问银行系统)查询该客户账户信息的视图,利用SQL SERVER系统函数system_user获得数据库用户名。
图25.根据登录名查询账户信息
7、实训七:存储过程实现业务处理
(1) 完成存款或取款业务 描述:
? 根据银行卡号和交易金额实现银行卡的存款和取款业务。
? 每一笔存款,取款业务都要计入银行交易账,并同时更新客户的存款余额。 ? 如果是取款业务,在记账之前,要完成下面两项数据的检查验证工作,如果
检查不合格,那么中断取款业务,给出提示信息后退出。 ? 检查客户输入的密码是否正确。
? 账户取款金额是否大于当前存款额加1。 要求:
? 取款或存款存储过程名为usp_takeMoney。
? 编写一个存储过程完成存款和取款业务,并调用存储过程取钱或者存钱进行
测试,测试数据是张飞的卡号支取100元(密码123456),关羽的卡号存入2100元。
? 结果如下图所示
下述两图为张飞卡号存入2100元的运行结果:
40