ATM-简单SQL查询
use master go if exists(select * from sysDatabases where name = 'BankDB') drop database BankDB go create database BankDB go use BankDB go --建用户信息表 if exists(select * from sysObjects where name = 'Xxl_UserInfo') drop table Xxl_UserInfo go create table Xxl_UserInfo (Xxl_User_Id int not null primary key identity ,Xxl_User_Name nvarchar(20) not null ,Xxl_User_Sex bit not null ,Xxl_User_IDcard char(18) not null unique ,Xxl_User_Moblie char(11) not null check(Xxl_User_Moblie like '1[3579][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),Xxl_User_Address nvarchar(50) not null ) go --建用户卡信息表 if exists(select * from sysObjects where name = 'Xxl_CardInfo') drop table Xxl_CardInfo go create table Xxl_CardInfo (Xxl_Card_No char(16) not null primary key check(Xxl_Card_No like '66668888[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') ,Xxl_Card_pwd char(6) not null default('666888') ,From_Xxl_User_Id int not null references Xxl_UserInfo(Xxl_User_Id),Xxl_Card_Date DateTime not null default(getdate()) ,Xxl_Card_Balance decimal(18,2) not null check(Xxl_Card_Balance >= 0) ,Xxl_Card_State int not null check(Xxl_Card_State in (0,1,2)),Xxl_Card_Text nvarchar(50) not null ) go --建交易信息表 if exists(select * from sysObjects where name = 'Xxl_TransInfo') drop table Xxl_TransInfo go create table Xxl_TransInfo (Xxl_Trans_FlowNum int not null identity primary key ,From_Xxl_Card_No char(16) not null references Xxl_CardInfo(Xxl_Card_No) ,Xxl_Trans_Type int not null check(Xxl_Trans_Type in (1,2)) ,Xxl_Trans_Quota decimal(18,2) not null check(Xxl_Trans_Quota > 0) ,Xxl_Trans_Date DateTime not null default(getdate()) ,Xxl_Trans_ed_Balance decimal(18,2) not null check(Xxl_Trans_ed_Balance >= 0) ,Xxl_Trans_Text varchar(50) not null ) go ------添加用户信息 insert Xxl_UserInfo values('徐小龙',1,'42028120000114125X','13071226588','湖北武汉') insert Xxl_UserInfo values('张小杨',0,'42028119980515543X','13045114154','湖北武汉') insert Xxl_UserInfo values('吴小心',0,'42028120001202114X','13071557444','湖北武汉') ----添加用户卡信息 insert Xxl_CardInfo values('6666888845125214','666888',1,'2006-2-12',600,0,'使用') insert Xxl_CardInfo values('6666888865896548','666888',1,'2007-2-20',3000,0,'使用') insert Xxl_CardInfo values('6666888812454852','666888',2,'2016-6-12',6300,0,'使用') insert Xxl_CardInfo values('6666888852145698','666888',3,'2018-3-24',500,0,'使用') ----添加交易信息 insert Xxl_TransInfo values('6666888845125214',1,300,'2016-3-12',300,'存入300元') insert Xxl_TransInfo values('6666888845125214',1,300,'2017-5-3',600,'存入300元') insert Xxl_TransInfo values('6666888865896548',1,6000,'2013-9-1',6000,'存入6000元') insert Xxl_TransInfo values('6666888865896548',2,3000,'2014-9-1',3000,'转账3000元给6666888812454852') insert Xxl_TransInfo values('6666888812454852',1,3000,'2017-3-6',3000,'6666888865896548转入的3000元') insert Xxl_TransInfo values('6666888812454852',1,3300,'2017-12-1',6300,'存入3300元') insert Xxl_TransInfo values('6666888852145698',1,3000,'2018-6-3',3000,'存入3000元') insert Xxl_TransInfo values('6666888852145698',2,2500,'2018-7-3',500,'取出2500元') ------备份交易信息表 select * into Xxl_TransInfo_BAK from Xxl_TransInfo --------查询各表数据 --select * from Xxl_UserInfo --select * from Xxl_CardInfo --select * from Xxl_TransInfo --select * from Xxl_TransInfo_BAK ----------------------------------------创建函数---------------------------------------- --加逗号的函数 if exists(select * from sysObjects where name='function_JiaDouhao')drop function function_JiaDouhao go create function function_JiaDouhao( @Money decimal(18,2))returns varchar(50) asbegindeclare @a varchar(50)= left(@Money,len(@Money)-3)declare @b varchar(50)= right(@Money,3)while (len(@a)>3)beginselect @b = ','+right(@a,3)+@bselect @a = left(@a,len(@a)-3)end return @a+@bend go ------------------------------------------结束------------------------------------------ ----------------------------------------创建视图---------------------------------------- --用户信息视图 if exists(select * from sysObjects where name ='vw_UserInfo')drop view vw_UserInfo go create view vw_UserInfo as select Xxl_User_Id 编号,Xxl_User_Name 姓名,case Xxl_User_Sex when 0 then '女'when 1 then '男'end 性别,Xxl_User_IDcard 身份证,Xxl_User_Moblie 联系电话,Xxl_User_Address 籍贯from Xxl_UserInfo go --使用视图 --select * from vw_UserInfo --卡信息视图 if exists(select * from sysObjects where name='vw_CardInfo')drop view vw_CardInfo go create view vw_CardInfo as select Xxl_Card_No 卡号,Xxl_User_Name 姓名,Xxl_Card_Balance 余额,Xxl_Card_Date 开卡日期,case Xxl_Card_Statewhen 0 then '正常'when 1 then '冻结'when 2 then '注销'end 状态,dbo.function_JiaDouhao(Xxl_Card_Balance) 货币表示from Xxl_UserInfo UserInfo inner join Xxl_CardInfo CardInfo on UserInfo.Xxl_User_Id = CardInfo.From_Xxl_User_Id go --使用视图 --select * from vw_CardInfo --交易记录视图 if exists(select * from sysObjects where name='vw_TransInfo')drop view vw_TransInfo go create view vw_TransInfo as select ----卡号,交易日期,交易类型,交易金额,余额,描述 Xxl_Card_No 卡号,Xxl_Trans_Date 交易日期,case Xxl_Trans_Typewhen 1 then '存入'when 2 then '支取'end 交易类型,case Xxl_Trans_Typewhen 1 then '+'+convert(varchar(20),Xxl_Trans_Quota)when 2 then '-'+convert(varchar(20),Xxl_Trans_Quota)end 交易金额,Xxl_Trans_ed_Balance 余额,Xxl_Trans_Text 描述from Xxl_CardInfo CardInfo inner join Xxl_TransInfo TransInfo on CardInfo.Xxl_Card_No = TransInfo.From_Xxl_Card_No go --使用视图 --select * from vw_TransInfo --------------------------------------------结束-------------------------------------------- ----------------------------------------创建存储过程---------------------------------------- --1、 查询余额 if exists(select * from sysObjects where name='p_SelectBalance')drop proc p_SelectBalance go create proc p_SelectBalance@CardNo char(16) asselect 货币表示 as 余额 from vw_CardInfo where 卡号 = @CardNo go --exec p_SelectBalance '6666888845125214' --2、 查询某两日期之间交易记录 if exists(select * from sysObjects where name='p_SelectStart_StopDate')drop proc p_SelectStart_StopDate go create proc p_SelectStart_StopDate@CardNo char(16),@StartDate datetime,@StopDate datetime asselect * from vw_TransInfo where 卡号 = @CardNo and 交易日期 >= @StartDate and 交易日期 < dateadd(dd,1,@StopDate) go --exec p_SelectStart_StopDate '6666888845125214','1990-1-1','2018-9-9'--3、 修改密码功能 if exists(select * from sysObjects where name='p_Update_Pwd')drop proc p_Update_Pwd go create proc p_Update_Pwd@CardNo char(16),@CardPwdStart char(6),@CardPwdStop char(6) asupdate Xxl_CardInfo set Xxl_Card_pwd=@CardPwdStop where Xxl_Card_No = @CardNo and Xxl_Card_pwd = @CardPwdStart go --exec p_Update_Pwd '6666888845125214','666888','548888' --4、 存款功能(备份) if exists(select * from sysObjects where name='p_SeveMoney')drop proc p_SeveMoney go create proc p_SeveMoney@CardNo char(16),@Quota decimal(18,2),@errMeg varchar(50) output as--判断存款金额if @Quota <= 0beginset @errMeg = '输入金额有误!'return -1endbegin trandeclare @err int = 0declare @startBalance decimal(18,2) = 0select @startBalance=Xxl_Card_Balance from Xxl_CardInfo where Xxl_Card_No = @CardNo--添加存款记录insert Xxl_TransInfo values(@CardNo,1,@Quota,getdate(),(@startBalance + @Quota),('存入' + convert(varchar(50), @Quota) + '元'))select @err = @@ERROR + @err--更新余额update Xxl_CardInfo set Xxl_Card_Balance = (@startBalance + @Quota) where Xxl_Card_No = @CardNoselect @err = @@ERROR + @errif @err = 0beginset @errMeg = '操作成功'commit tranreturn 0endbeginset @errMeg = '未知错误!'rollback tranreturn -1end go --5、 取款功能(备份) if exists(select * from sysObjects where name='p_GetMoney')drop proc p_GetMoney go create proc p_GetMoney@CardNo char(16),@Quota decimal(18,2),@errMeg varchar(50) output as--判断取款金额if @Quota <= 0beginset @errMeg = '输入金额有误!'return -1end--查询原有余额declare @startBalance decimal(18,2)select @startBalance=Xxl_Card_Balance from Xxl_CardInfo where Xxl_Card_No = @CardNo--判断余额是否足够if @startBalance > @Quotabeginset @errMeg = '余额不足!'return -1endbegin trandeclare @err int = 0--添加取款记录insert Xxl_TransInfo values(@CardNo,2,@Quota,getdate(),(@startBalance - @Quota),('取出' + convert(varchar(50), @Quota) + '元'))select @err = @@ERROR + @err--更新余额update Xxl_CardInfo set Xxl_Card_Balance = (@startBalance - @Quota) where Xxl_Card_No = @CardNoselect @err = @@ERROR + @errif @err = 0beginset @errMeg = '操作成功'commit tranreturn 0endelsebeginset @errMeg = '未知错误!'rollback tranreturn -1end go --6、 转帐功能(备份) if exists(select * from sysObjects where name='p_TeansferMoney')drop proc p_TeansferMoney go create proc p_TeansferMoney@FromCardNo char(16),@ToCardNo char(16),@Quota decimal(18,2),@errMeg varchar(50) output as--判断目标账户是否为本身if @FromCardNo != @ToCardNobeginset @errMeg = '目标账户不可以为自己!'return -1end--判断目标账户是否存在if not exists(select * from Xxl_CardInfo where Xxl_Card_No = @ToCardNo)beginset @errMeg = '目标账户不存在!'return -1end--判断转账金额是否正确if @Quota <= 0beginset @errMeg = '输入金额有误!'return -1end--查询From原有余额declare @FromStartBalance decimal(18,2)select @FromStartBalance=Xxl_Card_Balance from Xxl_CardInfo where Xxl_Card_No = @FromCardNo--判断From余额是否充足if @FromStartBalance < @Quotabeginset @errMeg = '余额不足!'return -1endbegin trandeclare @err int = 0--查询To原有余额declare @ToStartBalance decimal(18,2)select @ToStartBalance=Xxl_Card_Balance from Xxl_CardInfo where Xxl_Card_No = @ToCardNo--更新余额update Xxl_CardInfo set Xxl_Card_Balance = (@FromStartBalance - @Quota) where Xxl_Card_No = @FromCardNoselect @err = @@ERROR + @errupdate Xxl_CardInfo set Xxl_Card_Balance = (@ToStartBalance + @Quota) where Xxl_Card_No = @ToCardNoselect @err = @@ERROR + @err--添加交易记录insert Xxl_TransInfo values(@FromCardNo,2,@Quota,getdate(),(@FromStartBalance - @Quota), '转出' + convert(varchar(50), @Quota) + '元给'+@ToCardNo)select @err = @@ERROR + @errinsert Xxl_TransInfo values(@ToCardNo,1,@Quota,getdate(),(@ToStartBalance + @Quota),('由' +@FromCardNo+ '转入'+ convert(varchar(50), @Quota) + '元'))select @err = @@ERROR + @errif @err = 0beginset @errMeg = '操作成功!'commit tranreturn 0endelsebeginset @errMeg = '未知错误!'rollback tranreturn -1end go --exec p_TeansferMoney '6666888812454852','6666888845125214',300.00 --7、 随机产生卡号(卡号格式为:8228 6688 XXXX XXXX) 注:随机产生的卡号已经存在的不能用 if exists(select * from sysObjects where name='P_GenerateBankcard')drop proc P_GenerateBankcard go create proc P_GenerateBankcard@Card char(16) output as while 1 = 1beginselect @Card = convert (varchar(8), '66668888')+right(convert(dec(10,10),rand()),8)if not exists(select * from Xxl_CardInfo where Xxl_Card_No = @Card)breakend go --declare @Card char(16) --exec P_GenerateBankcard @Card output --select @Card as 卡号 --8、 开户功能 if exists(select * from sysobjects where name = 'P_AccountOpening')drop proc P_AccountOpening go create proc P_AccountOpening@Name nvarchar(20),@Sex bit,@IdCard char(18),@Moblie char(11),@Address nvarchar(50),@errMeg varchar(50) output asif exists (select * from Xxl_UserInfo where Xxl_User_IDcard =@IdCard)beginset @errMeg = '存在此账户!'return -1endbegin trandeclare @UserID intdeclare @err int = 0insert Xxl_UserInfo values(@Name,@Sex,@IdCard,@Moblie,@Address)select @err = @@ERROR + @errdeclare @Card varchar(16)exec P_GenerateBankcard @Card outputselect @UserID = Xxl_User_Id from Xxl_UserInfo where Xxl_User_IDcard = @IdCardinsert Xxl_CardInfo values(@Card,default,@UserId,getdate(),0,0,'使用')select @err = @@ERROR + @errif(@err = 0)beginset @errMeg = '开户成功!'commit tranreturn 0end else beginset @errMeg = '未知错误!'rollback tranreturn -1end go --9、 解冻功能 if exists(select * from sysobjects where name = 'P_ThawAccount')drop proc P_ThawAccount go create proc P_ThawAccount@CardNo nchar(18) asupdate Xxl_CardInfo set Xxl_Card_State = 0 where Xxl_Card_No = @CardNoreturn 0 go --10、 根据用户身份证,查询该用户下所有的银行卡信息 if exists(select * from sysobjects where name = 'P_SelectCard')drop proc P_SelectCard go create proc P_SelectCard@IdCard nchar(18) asdeclare @ID varchar(20)select @ID = Xxl_User_Id from Xxl_UserInfo where Xxl_User_IDcard = @IdCardselect * from Xxl_CardInfo where From_Xxl_User_Id = @ID go --------------------------------------------结束--------------------------------------------
转载于:https://www.cnblogs.com/RemMai/p/9703899.html
ATM-简单SQL查询相关推荐
- 简单SQL查询 在野狗中的对应实现
野狗实时后端云主要提供的是一个实时通信的通道,但是毕竟也提供了数据存储的功能.因此野狗也可以被看作是一个具有实时同步数据功能的云端数据库. 这个数据库是NoSQL的,数据的存储是树型的,类似一个巨大的 ...
- mybatis注解查询用于简单sql,@parm()与#{}两括号取值要一致
注解查询用于dao接口方法之上,RCUD都一样:@parm()与#{}两括内取值要一致 public interface UserDao{@select("select id,name fr ...
- bigquery_到Google bigquery的sql查询模板,它将您的报告提升到另一个层次
bigquery In this post, we're sharing report templates that you can build with SQL queries to Google ...
- sql 查询手动创建的表_学习SQL:使用SQL查询手动创建报告
sql 查询手动创建的表 In the previous two articles, we've practiced SQL queries and went through a few more e ...
- SQL 查询的分布式执行与调度
作者:张茄子算法. 分布式技术和函数式编程爱好者 OLAP 是大数据分析应用非常重要的组成部分.这篇文章是介绍 OLAP 任务在并发/分布式环境下执行和调度的算法和模型的.我们将从最简单的 Volca ...
- 数据库原理与应用(SQL Server)笔记 第二章 简单数据查询
文章目录 前言 一.SELECT 子句 (一)投影指定的列和投影全部列 (二)AS子句修改查询结构的列标题 例题1 (三)TOP谓词限制结果集中的行数 (四)INTO子句将结果插入新表中 例题2 (五 ...
- 震惊!阿里的程序员竟被一个简单的 SQL 查询难住了!
作者 | 唐磊 责编 | Carol 来源 | 程序猿石头 封图 | CSDN 付费下载于视觉中国 最近工作上遇到一个"神奇"的问题,或许对大家有帮助,因此形成本文. 问题大概是, ...
- 【360开源】Quicksql——更简单,更安全,更快速的跨数据源统一SQL查询引擎
话说天下大势,分久必合,合久必分. --罗贯中大大 前言 SQL,全称Structured Query Language,是当今使用最广泛的数据查询语言.最初的设计仅仅是适用于RDBMS,可是随着数据 ...
- 从Mysql源代码角度分析一句简单sql的查询过程
1. 前言 使用mysql这么多年,以前一直只懂写sql,却不其中运行原理,直至最近抽时间看了一下mysql源代码, 对其事务运行原理及sql解析优化有一些更深入的理解. 本篇是讲述sql解析的开篇之 ...
- Antlr4之简单的sql查询解析demo
当前版本:jdk1.8.antlr4.8 1. 声明 当前内容主要为测试和使用Antlr4,并设计简单的SQL查询解析(本人解析IoTDB源码中发现其中使用了Antlr4来实现对sql执行的解析) 1 ...
最新文章
- 如何设置SOLR的高亮 (highlight)?
- Linux之数组和关联数组
- 计算机本地用户删除后怎么恢复,Default User文件夹被删了怎样恢复
- 站酷用HTML5播放视频,站酷:动效展示实践的问题及解决
- python 添加数据库表_通过时间表(Python库)简化复杂的计划
- matlab替换矩阵中元素的值,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
- Autoware docker 环境安装
- [数据可视化] 饼图(Pie Chart)
- js中的引号使用不正确导致js方法传入参数类型错误
- 分享网友第一次开发EOS区块链总结的经验
- 国内的IT生意,敢问路在何方?
- 【计算机网络】湖科大微课堂笔记 p7-10 计算机网络体系结构:常见的计算机网络体系结构、必要性、分层思想、专业术语
- 010 Editor 9.0.2——注册错误(010 Editor has detected that you have entered an invalid license.)
- DIV布局 web网页设计实例作业 ——抗疫-逆行者(5页) 致敬逆行者网页设计作品 大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载
- Springboot+MybatisPlus+layui简易账单管理项目
- Star-Transformer
- 智能座舱更看重「性能冗余」,4家中国供应商领跑高通两代平台
- 思科ocserv服务搭建
- 使用opencv将jpg转png
- 堡垒机、跳板机JumpServer的搭建,以及使用,图文详细