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查询相关推荐

  1. 简单SQL查询 在野狗中的对应实现

    野狗实时后端云主要提供的是一个实时通信的通道,但是毕竟也提供了数据存储的功能.因此野狗也可以被看作是一个具有实时同步数据功能的云端数据库. 这个数据库是NoSQL的,数据的存储是树型的,类似一个巨大的 ...

  2. mybatis注解查询用于简单sql,@parm()与#{}两括号取值要一致

    注解查询用于dao接口方法之上,RCUD都一样:@parm()与#{}两括内取值要一致 public interface UserDao{@select("select id,name fr ...

  3. bigquery_到Google bigquery的sql查询模板,它将您的报告提升到另一个层次

    bigquery In this post, we're sharing report templates that you can build with SQL queries to Google ...

  4. sql 查询手动创建的表_学习SQL:使用SQL查询手动创建报告

    sql 查询手动创建的表 In the previous two articles, we've practiced SQL queries and went through a few more e ...

  5. SQL 查询的分布式执行与调度

    作者:张茄子算法. 分布式技术和函数式编程爱好者 OLAP 是大数据分析应用非常重要的组成部分.这篇文章是介绍 OLAP 任务在并发/分布式环境下执行和调度的算法和模型的.我们将从最简单的 Volca ...

  6. 数据库原理与应用(SQL Server)笔记 第二章 简单数据查询

    文章目录 前言 一.SELECT 子句 (一)投影指定的列和投影全部列 (二)AS子句修改查询结构的列标题 例题1 (三)TOP谓词限制结果集中的行数 (四)INTO子句将结果插入新表中 例题2 (五 ...

  7. 震惊!阿里的程序员竟被一个简单的 SQL 查询难住了!

    作者 | 唐磊 责编 | Carol 来源 | 程序猿石头 封图 | CSDN 付费下载于视觉中国 最近工作上遇到一个"神奇"的问题,或许对大家有帮助,因此形成本文. 问题大概是, ...

  8. 【360开源】Quicksql——更简单,更安全,更快速的跨数据源统一SQL查询引擎

    话说天下大势,分久必合,合久必分. --罗贯中大大 前言 SQL,全称Structured Query Language,是当今使用最广泛的数据查询语言.最初的设计仅仅是适用于RDBMS,可是随着数据 ...

  9. 从Mysql源代码角度分析一句简单sql的查询过程

    1. 前言 使用mysql这么多年,以前一直只懂写sql,却不其中运行原理,直至最近抽时间看了一下mysql源代码, 对其事务运行原理及sql解析优化有一些更深入的理解. 本篇是讲述sql解析的开篇之 ...

  10. Antlr4之简单的sql查询解析demo

    当前版本:jdk1.8.antlr4.8 1. 声明 当前内容主要为测试和使用Antlr4,并设计简单的SQL查询解析(本人解析IoTDB源码中发现其中使用了Antlr4来实现对sql执行的解析) 1 ...

最新文章

  1. 如何设置SOLR的高亮 (highlight)?
  2. Linux之数组和关联数组
  3. 计算机本地用户删除后怎么恢复,Default User文件夹被删了怎样恢复
  4. 站酷用HTML5播放视频,站酷:动效展示实践的问题及解决
  5. python 添加数据库表_通过时间表(Python库)简化复杂的计划
  6. matlab替换矩阵中元素的值,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
  7. Autoware docker 环境安装
  8. [数据可视化] 饼图(Pie Chart)
  9. js中的引号使用不正确导致js方法传入参数类型错误
  10. 分享网友第一次开发EOS区块链总结的经验
  11. 国内的IT生意,敢问路在何方?
  12. 【计算机网络】湖科大微课堂笔记 p7-10 计算机网络体系结构:常见的计算机网络体系结构、必要性、分层思想、专业术语
  13. 010 Editor 9.0.2——注册错误(010 Editor has detected that you have entered an invalid license.)
  14. DIV布局 web网页设计实例作业 ——抗疫-逆行者(5页) 致敬逆行者网页设计作品 大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载
  15. Springboot+MybatisPlus+layui简易账单管理项目
  16. Star-Transformer
  17. 智能座舱更看重「性能冗余」,4家中国供应商领跑高通两代平台
  18. 思科ocserv服务搭建
  19. 使用opencv将jpg转png
  20. 堡垒机、跳板机JumpServer的搭建,以及使用,图文详细

热门文章

  1. 弗洛伊德龟兔赛跑算法(弗洛伊德判圈算法)
  2. 黑塞矩阵和雅可比矩阵理解
  3. Windows消息大全(易语言版)
  4. SAP一句话入门:SD+PP+MM+FICO+HR(转)
  5. windows-PSPing
  6. HMS生态的华为主题风格太多了
  7. EDA(探索性数据分析)
  8. UOS搭建QT开发环境
  9. 山寨AppStore的暴富者
  10. 人间不正经生活语录(三)