Programación, escritura y llamada de procedimientos almacenados en T-SQL
Uno completo.
Eche un vistazo, use master
go
--Crear base de datos
si existe (seleccione * de sysdatabases donde nombre = 'bankDB')
eliminar base de datos bankDB
go
crear base de datos bankDB
on
(
nombre = 'bankDB ',
nombre de archivo = 'e:\bankDB.mdf',
tamaño = 3 MB,
crecimiento del archivo = 20%
)
gouse bankDB
go
--Crear tabla UserInfo
si existe (seleccione * de sysobjects donde nombre = 'UserInfo')
soltar tabla UserInfo
ir
crear tabla UserInfo
(
customerID int identidad(1,1 ) no nulo,
nombre del cliente varchar(16) no nulo,
PID varchar(20) no nulo,
teléfono varchar(15) no nulo,
dirección varchar(225)
)
tabla goalter UserInfo
agregar restricción PK_customerID clave principal (customerID),
restricción UQ_PID única (PID),
restricción CK_PID check((len(PID)=15) o (len(PID)=18)),
restricción CK_telephone check( len(teléfono) entre 11 y 13)--(teléfono como '[0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9]') o (teléfono como '[0-9][0-9][0-9][0-9][-] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')o (teléfono como '[0- 9][0-9][0-9][-][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9]'))
vaya a insertar en Información de usuario(nombre del cliente,PID,teléfono,dirección)
seleccione 'Zhang San','123456789012345','010-67898978', Unión 'Beijing Haidian'
select '李思','321245678912345678','0478-44443333',null
go--Crear tabla cardInfo
if existe (seleccione * de sysobjects donde nombre = 'cardInfo')
soltar tabla cardInfo
go
>
crear tabla cardInfo
(
cardID varchar(19) no nulo,
curType varchar(10) no nulo,
saveType varchar(10) no nulo,
openDate datetime no nulo,
dinero openMoney no nulo,
saldo de dinero no nulo,
pase varchar(12) no nulo,
IsReportLoss varchar(2) no nulo,
customerID int no nulo
)
tabla de porteros cardInfo
agregar restricción PK_cardID clave primaria (cardID),
restricción CK_cardID check(cardID like ('1010[ ]3576[ ][0-9][0- 9][0-9][0-9][ ][0-9][0-9][0-9][0-9]')),
restricción DF_curType default(' RMB') para curType,
restricción CK_servedType check( SavingType in('current','fixed-term','regular')),
restricción DF_openDate default(getdate() ) para openDate,
restricción CK_openMoney check(openMoney>=1),
restricción CK_balance check(balance>=1),
restricción DF_pass default( ' 888888') para pasar,
restricción CK_IsReportLoss check(IsReportLoss in('yes','no')),
restricción DF_IsReportLoss default('no') para IsReportLoss,
p>restricción FK_customerID clave externa (customerID) hace referencia a UserInfo(customerID)
goinsert into cardInfo(cardID, SavingType,openMoney,balance,customerID)
seleccione '1010 3576 1234 5678','current',1000,1000,1 union
select '1010 3576 1212 1134','term',1,1,2
go--Crear tabla transInfo
si existe (seleccione * de sysobjects donde nombre = 'transInfo')
soltar tabla transInfo
ir
crear tabla transInfo
(
transDate fecha y hora no nu
ll,
cardID varchar(19) no nulo,
transType varchar(4) no nulo,
dinero transMoney no nulo,
comentario varchar(225)
)
tabla de goalter transInfo
agregar restricción DF_transDate default(getDate()) para transDate,
restricción FK_cardID clave externa(cardID) hace referencia a cardInfo(cardID),
restricción CK_transType check(transType in('deposit','withdraw')),
restricción CK_transMoney check(transMoney > 0)
goinsert into transInfo(cardID,transType,transMoney)
values('1010 3576 1234 5678','Withdrawal',900)
actualizar cardInfo establecer saldo=saldo-900 donde cardID='1010 3576 1234 5678'
insertar en transInfo(cardID,transType,transMoney)
values('1010 3576 1212 1134',' Depósito ',5000)
actualizar cardInfo establecer saldo=saldo+5000 donde cardID='1010 3576 1212 1134'
ir/*---------- -- ----Simulación empresarial general-------------*/
--Zhang San cambia la contraseña del número de tarjeta
actualizar cardInfo set pass = '123456' donde cardID='1010 3576 1234 5678'
actualizar cardInfo set pass='123123' donde cardID='1010 3576 1212 1134'
ir
--Reportar pérdida de tarjeta bancaria Li Si
actualizar cardInfo set IsReportLoss='Yes' donde cardID='1010 3576 1212 1134'
go
- - Estadísticas del saldo de circulación de capital del banco y liquidación de ganancias
declare @inMoney dinero,@outMoney dinero
seleccione @inMoney=sum(transMoney) de transInfo donde transType='deposit'< / p>
seleccione @outMoney=sum(transMoney) de transInfo donde transType='Withdrawal'
print 'La cantidad circulante es: '+convert(varchar(10),@inMoney)+' RMB'
print 'La liquidación del retiro es:'+convert(varchar(10),@outMoney)+'RMB'
print 'La cantidad total de circulación bancaria es:' +con
vert(varchar(10),(@inMoney-@outMoney))+'RMB'
go
--Consulta a los usuarios que abrieron cuentas este mes y muestra la información relevante de la tarjeta
seleccione número de tarjeta=cardInfo.cardID,
Número de tarjeta contraseña=contraseña,
Nombre de cliente=nombre de cliente,
Cliente Número de identificación= PID,
Teléfono=teléfono,
Dirección=dirección,
Tipo de depósito=Tipo de ahorro,
Monto de apertura de cuenta= openMoney,
p>Saldo=saldo,
Moneda=curType,
Fecha de apertura de cuenta=openDate
de UserInfo
tarjeta de unión interna en UserInfo.customerID=cardInfo.customerID
transInfo de unión interna en cardInfo.cardID=transInfo.cardID
--Consulta esta semana
donde openDate entre (select dateadd(dd,-datepart(dw,getdate())+1,getdate())) y (select getdate())
go
--select getdate()
--select dateadd(dd,-datepart(dw,getdate())+1,getdate())
--select datepart(dw, getdate()) p>
--select dateiff(dd,(select dateadd(dd,-datepart(dw,getdate())+1,getdate())),getdate())
--Consultar información del cliente para una cuenta perdida reportada
seleccione nombre del cliente=nombre del cliente,
número de teléfono=teléfono
de Información del usuario
donde ID de cliente = (seleccione ID de cliente de cardInfo donde IsReportLoss = 'Sí')
ir
--Servicio de recordatorio de reclamaciones
seleccione nombre de cliente = nombre de cliente,
Número de contacto=teléfono,
Saldo de cuenta=saldo
desde UserInfo interno unirse cardInfo en UserInfo.customerID=cardInfo.customerID
donde saldo<=200
ir
--Crear proceso de almacenamiento
--Zhang San retira dinero
establecer sin cuenta p>
si existe (seleccione * de sysobjects donde nombre ='proc_takeMoney')
eliminar el procedimiento proc_takeMoney
ir
crear el procedimiento proc_takeMoney
@card varchar (19),
@m dinero,
@type varch
ar(4),
@inputPass varchar(6)=''
como
comenzar la transacción
declarar @errorsum int - -Definir acumulación de errores
set @errorsum=0
print 'La transacción está en progreso, por favor espera...'
declara @balance dinero p >
seleccione @saldo=saldo de cardInfo donde cardID=@tarjeta
actualice cardInfo establezca @saldo=@saldo-@m
donde cardID=@tarjeta y pase= @ inputPass
set @errorsum=@errorsum+@@error
if (@errorsum<>0)
comenzar
revertir transacción
print'¡El retiro falló! Después del retiro, el saldo de la tarjeta debe ser superior a 1 yuan. El saldo es insuficiente...'
print'Número de tarjeta:'+@card+' '+'Saldo:'+convert(varchar). (10),(@balance+@ m))
fin
else
comienzo
si @balance>=1 -- Si el saldo después del retiro sigue siendo mayor que 1, entonces el retiro se realizó correctamente
comenzar
confirmar la transacción
print '¡El retiro se realizó correctamente! '
insertar en transInfo(cardID,transType,transMoney)
valores(@card,@type,@m)
imprimir'Número de tarjeta:'+ @ tarjeta+' '+'Saldo:'+convert(varchar(10),(@saldo+@m))
fin
más
comienzo p >
revertir transacción
imprimir'¡Error en el retiro! Después del retiro, el saldo de la tarjeta debe ser superior a 1 yuan. El saldo es insuficiente...'
print'Número de tarjeta:'+@card+' '+'Saldo:'+convert(varchar). (10),(@balance+@ m))
end
end
go
--Crear un procedimiento almacenado p>
--Li Si Deposit
establecer nocount en
si existe (seleccione * de sysobjects donde nombre ='proc_inputMoney')
procedimiento de eliminación proc_inputMoney
ir
crear procedimiento proc_inputMoney
@card varchar(19),
@m dinero,
@type varchar(4) p>
como
comenzar la transacción