diff --git "a/25\346\235\250\344\270\260\345\215\216/\344\275\234\344\270\232/9.26 \347\254\254\345\215\201\344\272\214\350\212\202 \345\255\230\345\202\250\350\277\207\347\250\213/9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/25\346\235\250\344\270\260\345\215\216/\344\275\234\344\270\232/9.26 \347\254\254\345\215\201\344\272\214\350\212\202 \345\255\230\345\202\250\350\277\207\347\250\213/9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..393452f6f2ea92cb4648cfd3393d3bd54a2686fa --- /dev/null +++ "b/25\346\235\250\344\270\260\345\215\216/\344\275\234\344\270\232/9.26 \347\254\254\345\215\201\344\272\214\350\212\202 \345\255\230\345\202\250\350\277\207\347\250\213/9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,59 @@ +``` +--1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 + +go +create proc proc_one + +as +select top 1 CardNo ,RealName,CardMoney from AccountInfo a inner join BankCard b on a.AccountId=b.AccountId +order by CardMoney + +go +exec proc_one + +--2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 + +go +create proc proc_two +@moneys money, +@Id varchar(20) +as + update BankCard set CardMoney=CardMoney+@moneys where CardNo=@Id + insert CardExchange values(@Id,@moneys,0,GETDATE()) +go +exec proc_two'10000','6225125478544587' + +--3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 + +go +create proc proc_three +@moneys money, +@Id varchar(20) +as + declare @mone money= + (select CardMoney from BankCard where CardNo=@Id) + if (@mone-@moneys>0) + begin + update BankCard set CardMoney=CardMoney-@moneys where CardNo=@Id + insert CardExchange values(@Id,0,@moneys,GETDATE()) + print 1 + end + else + print -1 +go + +exec proc_three'10000','6225547854125656' + +--4. **查询出某时间段的银行存取款信息以及存款总金额**,取款总金额,传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 +go +create proc proc_four +@time1 smalldatetime ,@time2 smalldatetime +as +select sum(MoneyInBank) 返回存款总数,sum(MoneyOutBank) 返回取款总金额,ExchangeTime from CardExchange where ExchangeTime between @time1 and @time2 +group by ExchangeTime + +go +exec proc_four'2022-09-26 10:30:00','2022-09-26 10:49:00' + +``` + diff --git "a/25\346\235\250\344\270\260\345\215\216/\347\254\224\350\256\260/9.26 \347\254\254\345\215\201\344\270\211\350\212\202\350\257\276 \345\255\230\345\202\250\350\277\207\347\250\213.md" "b/25\346\235\250\344\270\260\345\215\216/\347\254\224\350\256\260/9.26 \347\254\254\345\215\201\344\270\211\350\212\202\350\257\276 \345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..c023648c0123ea47f6431e7ec864cd8e8dd29d58 --- /dev/null +++ "b/25\346\235\250\344\270\260\345\215\216/\347\254\224\350\256\260/9.26 \347\254\254\345\215\201\344\270\211\350\212\202\350\257\276 \345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,105 @@ +# 一、存储过程 + +#### 1、什么是存储过程 + +1.1.是预先存储好的sql程序,保存在sqlserver中,通过名称和参数执行。 +1.2.存储过程中可以包含:insert语句,update语句,delete语句,select语句,逻辑控制语句以及变量。 + +#### 2.存储过程的优点 + +1.执行速度更快 +2.允许模块化程序设计 +3.提高系统安全性 +4.减少网络流量 + +#### 3、存储过程的分类 + +1.系统存储过程 + +(1)一般以sp开头,由sqlserver创建、管理和使用 + +(2)存放在resource数据库中 + +(3)类似于C#的类库方法 +2.扩展存储过程 + +(1)通常以xp_开头,使用编程语言创建的外部存储过程 + +3.用户自定义存储过程 + +(1)由用户自己创建的存储过程。 + +#### 4、定义存储过程的语法 + +创建语法 + +不带参数: + +``` +go +create proc|procedure 存储名(一般以proc_开头) +as + + sql语句 + +go + +执行存储过程: + +exec 存储名 +``` + +带参数存储过程 + +``` +go +create proc|procedure 存储名(一般以proc_开头) +@值 参数类型 +as + + sql语句 + +go + +执行存储过程: + +exec 存储名 '参数' +``` + +带输出参数存储过程: + +``` +go +create proc|procedure 存储名(一般以proc_开头) +@值 参数类型 +@值2 参数类型 out -输出参数 +@值3 参数类型 output --输入输出参数 +as + + sql语句 + +go + +执行存储过程: +declare @值 参数类型 +declare @值2 参数类型 +declare @值3 参数类型 + +exec 存储名 '@值',@值2 out,'@值3' output +print @值1 +@值2 +``` + +修改存储过程 + +``` +在创建存储过程后 将create 改为 alter 后修改内容重新运行就好,不需要删除重建 +go +alter proc|procedure 存储名(一般以proc_开头) +@值 参数类型 +as + + sql语句 + +go +``` +