问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

T-SQL编程,存储过程编写和调用

发布网友 发布时间:2022-04-08 00:37

我来回答

1个回答

热心网友 时间:2022-04-08 02:07

一个完整的。 看看吧 use master
go
--创建数据库
if exists(select * from sysdatabases where name = 'bankDB')
drop database bankDB
go
create database bankDB
on
(
name = 'bankDB',
filename = 'e:\bankDB.mdf',
size = 3mb,
filegrowth = 20%
)
gouse bankDB
go
--创建表UserInfo
if exists(select * from sysobjects where name = 'UserInfo')
drop table UserInfo
go
create table UserInfo
(
customerID int identity(1,1) not null,
customerName varchar(16) not null,
PID varchar(20) not null,
telephone varchar(15) not null,
address varchar(225)
)
goalter table UserInfo
add constraint PK_customerID primary key(customerID),
constraint UQ_PID unique (PID),
constraint CK_PID check((len(PID)=15) or (len(PID)=18)),
constraint CK_telephone check(len(telephone) between 11 and 13)--(telephone like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') or (telephone like '[0-9][0-9][0-9][0-9][-][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')or (telephone like '[0-9][0-9][0-9][-][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))
goinsert into UserInfo(customerName,PID,telephone,address)
select '张三','123456789012345','010-67898978','北京海淀' union
select '李四','321245678912345678','0478-44443333',null
go--创建表cardInfo
if exists(select * from sysobjects where name = 'cardInfo')
drop table cardInfo
go
create table cardInfo
(
cardID varchar(19) not null,
curType varchar(10) not null,
savingType varchar(10) not null,
openDate datetime not null,
openMoney money not null,
balance money not null,
pass varchar(12) not null,
IsReportLoss varchar(2) not null,
customerID int not null
)
goalter table cardInfo
add constraint PK_cardID primary key (cardID),
constraint CK_cardID check(cardID like ('1010[ ]3576[ ][0-9][0-9][0-9][0-9][ ][0-9][0-9][0-9][0-9]')),
constraint DF_curType default('RMB') for curType,
constraint CK_savingType check(savingType in('活期','定活两便','定期')),
constraint DF_openDate default(getdate()) for openDate,
constraint CK_openMoney check(openMoney>=1),
constraint CK_balance check(balance>=1),
constraint DF_pass default('888888') for pass,
constraint CK_IsReportLoss check(IsReportLoss in('是','否')),
constraint DF_IsReportLoss default('否') for IsReportLoss,
constraint FK_customerID foreign key(customerID) references UserInfo(customerID)
goinsert into cardInfo(cardID,savingType,openMoney,balance,customerID)
select '1010 3576 1234 5678','活期',1000,1000,1 union
select '1010 3576 1212 1134','定期',1,1,2
go--创建表transInfo
if exists(select * from sysobjects where name = 'transInfo')
drop table transInfo
go
create table transInfo
(
transDate datetime not null,
cardID varchar(19) not null,
transType varchar(4) not null,
transMoney money not null,
remark varchar(225)
)
goalter table transInfo
add constraint DF_transDate default(getDate()) for transDate,
constraint FK_cardID foreign key(cardID) references cardInfo(cardID),
constraint CK_transType check(transType in('存入','支取')),
constraint CK_transMoney check(transMoney>0)
goinsert into transInfo(cardID,transType,transMoney)
values('1010 3576 1234 5678','支取',900)
update cardInfo set balance=balance-900 where cardID='1010 3576 1234 5678'
insert into transInfo(cardID,transType,transMoney)
values('1010 3576 1212 1134','存入',5000)
update cardInfo set balance=balance+5000 where cardID='1010 3576 1212 1134'
go/*----------------常规业务模拟--------------*/
--张三修改卡号密码
update cardInfo set pass='123456' where cardID='1010 3576 1234 5678'
update cardInfo set pass='123123' where cardID='1010 3576 1212 1134'
go
--李四银行卡挂失
update cardInfo set IsReportLoss='是' where cardID='1010 3576 1212 1134'
go
--统计银行的资金流通余额和盈利结算
declare @inMoney money,@outMoney money
select @inMoney=sum(transMoney) from transInfo where transType='存入'
select @outMoney=sum(transMoney) from transInfo where transType='支取'
print '流通金额为:'+convert(varchar(10),@inMoney)+'RMB'
print '取出结算为:'+convert(varchar(10),@outMoney)+'RMB'
print '银行流通金额总计为:'+convert(varchar(10),(@inMoney-@outMoney))+'RMB'
go
--查询本月开户的用户,并显示该卡的相关信息
select 卡号=cardInfo.cardID,
卡号密码=pass,
客户姓名=customerName,
客户身份证号=PID,
电话=telephone,
地址=address,
存款类型=savingType,
开户金额=openMoney,
余额=balance,
币种=curType,
开户日期=openDate
from UserInfo
inner join cardInfo on UserInfo.customerID=cardInfo.customerID
inner join transInfo on cardInfo.cardID=transInfo.cardID
--查询本周
where openDate between (select dateadd(dd,-datepart(dw,getdate())+1,getdate())) and (select getdate())
go
--select getdate()
--select dateadd(dd,-datepart(dw,getdate())+1,getdate())
--select datepart(dw,getdate())
--select datediff(dd,(select dateadd(dd,-datepart(dw,getdate())+1,getdate())),getdate())
--查询挂失账号的客户信息
select 客户姓名=customerName,
电话=telephone
from UserInfo
where customerID=(select customerID from cardInfo where IsReportLoss='是')
go
--催款提醒服务
select 客户姓名=customerName,
联系电话=telephone,
账上余额=balance
from UserInfo inner join cardInfo on UserInfo.customerID=cardInfo.customerID
where balance<=200
go
--创建储存过程
--张三取款
set nocount on
if exists(select * from sysobjects where name ='proc_takeMoney')
drop procere proc_takeMoney
go
create procere proc_takeMoney
@card varchar(19),
@m money,
@type varchar(4),
@inputPass varchar(6)=''
as
begin transaction
declare @errorsum int --定义错误累加量
set @errorsum=0
print'交易正在进行,请稍后……'
declare @balance money
select @balance=balance from cardInfo where cardID=@card
update cardInfo set @balance=@balance-@m
where cardID=@card and pass=@inputPass
set @errorsum=@errorsum+@@error
if (@errorsum<>0)
begin
rollback transaction
print'取款失败!取款后卡上的余额必须大于1元,余额不足……'
print'卡号:'+@card+' '+'余额:'+convert(varchar(10),(@balance+@m))
end
else
begin
if @balance>=1 --如果取款后的余额仍大于1,则取款成功
begin
commit transaction
print'取款成功!'
insert into transInfo(cardID,transType,transMoney)
values(@card,@type,@m)
print'卡号:'+@card+' '+'余额:'+convert(varchar(10),(@balance+@m))
end
else
begin
rollback transaction
print'取款失败!取款后卡上的余额必须大于1元,余额不足……'
print'卡号:'+@card+' '+'余额:'+convert(varchar(10),(@balance+@m))
end
end
go
--创建存储过程
--李四存款
set nocount on
if exists(select * from sysobjects where name ='proc_inputMoney')
drop procere proc_inputMoney
go
create procere proc_inputMoney
@card varchar(19),
@m money,
@type varchar(4)
as
begin transaction
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么网址更新火影忍者集数最快 如果你跟男朋友分手了,他的回答是顺其自然这是什么意思,我该怎么办... 一个女人像男人提分手男人说顺其自然是什么意思 上线两年《X-HERO》如何做到登顶多个国家榜首的? 龙武游戏怎么样费钱吗 Q1游戏公司产品 中国现有什么银行 x.最近六个月的通话记录? 爱奇艺会员哪里买便宜 爱奇艺会员免费领取 iphone4 怎样删除原来的旧凯立德地图 支付宝转账错误申请退款多久到账 支付宝退款多久到账 支付宝退款大概多久能到账 支付宝申请退款要多久才能钱退回来 支付宝支付退款到银行卡要多久 用支付宝转账到银行卡退款需要多长时间到账 用余额宝支付,退款了,钱多久到账 支付宝退款钱多久到账 支付宝退款后钱什么时候到账 商家退款到余额宝多久到账 余额宝退款成功多久到账/余额宝退款成功多久到账 支付宝申请退款多久到账/支付宝申请退款多久到账 支付宝余额宝退款多久到账 支付宝退款到银行卡多久到账? 怪物猎人世界PC多少钱 MHW PC价格介绍 怪物猎人世界什么时候在wegame.steam上出来定价多少 steam的怪物猎人世界何时能上架,好期待 《怪物猎人世界》pc版在哪个平台发售 pc版锁区吗 怪物猎人世界 steam多少钱 怪物猎人世界可以在steam上预购了吗,为什么 支付宝退款成功信用卡多久到账 支付宝转账到银行卡申请退款要多久 交易猫支付宝余额宝退款多久到账 ipad air如何发短信 ipad2怎样发短信?不太会。。。 白岩松回应被骂上热搜:好心被年轻人当了驴肝肺!网友:虚伪,你怎么看? 对于“老人遭执勤人员绑树谩骂”这件事,白岩松是如何评价的? 白岩松是如何评老人遭执勤人员绑树谩骂? 白岩松评老人遭执勤人员绑树谩骂,你认可他的说法吗? 白岩松说防疫是大事但行为不能破底线,防疫突破底线可能导致什么后果? 同样谈“躺平”,为何白岩松被骂,而郑渊洁受捧? 白岩松上节目回应被网暴,网络暴力对于一个人的伤害有多大? 我觉得白岩松的发言,总能很理性的告诉我们,我们应该更理性的看待问题,为什么这么多人骂他呢? 从敬佩到公敌,白岩松的面具揭开了,可能王朔当初的话没错,他说了什么? 白岩松的节目怎么要停播了? 王朔曝光央视名嘴白岩松真面目,原来我们被骗了20年,究竟发生了什么? “央视名嘴”白岩松,被好友水均益爆料:敢指着台长鼻子骂,为何呢? 这几天为什么都在骂白岩松? 央视名嘴董倩为何被骂滚出主持界,白岩松不再隐瞒说出真相,原因是什么呢... 济南佳宝乳业有无三聚氰铵