diff --git "a/15\351\231\210\347\253\213\346\231\272/10.7/.keep" "b/15\351\231\210\347\253\213\346\231\272/10.7/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/15\351\231\210\347\253\213\346\231\272/10.7/10-7-\345\255\230\345\202\250\350\277\207\347\250\213\347\254\224\350\256\260.md" "b/15\351\231\210\347\253\213\346\231\272/10.7/10-7-\345\255\230\345\202\250\350\277\207\347\250\213\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..9b792a7bf769099f39378f58e84089f56eae930c --- /dev/null +++ "b/15\351\231\210\347\253\213\346\231\272/10.7/10-7-\345\255\230\345\202\250\350\277\207\347\250\213\347\254\224\350\256\260.md" @@ -0,0 +1,42 @@ +##存储过程 +存储过程是**预编译**SQL语句集合,这些语句存储在一个名称(存储过程的名称)下并作为单元来处理。存储过程代替了传统的逐条执行SQL语句的方式,一个存储过程中可以包含查询、插入、删除、更新等操纵的一系列SQL语句,当这个存储过程被调用执行时,这些操作也会同时执行。 + +封装好 --> 调用 + +创建存储过程分为四部 +1.没有输入参数,没有输出参数的存储过程。 +2.有输入参数,没有输出参数的存储过程。 +3.有输入参数,没有输出参数,但是有返回值的存储过程(返回值必须整数)。 +4.有输入参数,有输出参数的存储过程 & 一个变量具备同时输入输出参数的存储过程 + +##执行存储过程 +exec +declare + +##删除存储过程 + +drop procedure <存储过程名称> + +##存储过程的优点 + +允许模块化程序设计 + +执行速度更快 + +减少网络流通量 + +提高系统安全性 + +#### 存储过程与函数的区别 + +1.储存过程可以有返回值也可以无返回值。函数必须有返回值。 + +2.存储过程的实现比较复杂,而函数的实现比较有针对性。 + +3.储存过程可以输入输出参数,而函数只可以输入参数。 + +4.过程允许在其中选择以及DML语句,而函数只可以在其中select语句。 + +5.可以在存储过程中调用函数,不可以在函数中调用存储过程。 + +6.函数可以作为条件在语句中使用,但是存储过程不可以。 \ No newline at end of file diff --git "a/15\351\231\210\347\253\213\346\231\272/10.7/SQLQuery2.sql" "b/15\351\231\210\347\253\213\346\231\272/10.7/SQLQuery2.sql" new file mode 100644 index 0000000000000000000000000000000000000000..42569000c1077108c89b2ce62613305a1021eb71 --- /dev/null +++ "b/15\351\231\210\347\253\213\346\231\272/10.7/SQLQuery2.sql" @@ -0,0 +1,92 @@ +--1. 洢ʵֲѯ˻͵п˻Ϣ,ʾпţ˻ +create proc proc_MinMoneyCard +as +begin +select top 1 CardNo п,RealName ,CardMoney +from BankCard inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId +order by CardMoney asc +end +go + +exec proc_MinMoneyCard + +--2. ģпǮпţǮʵִǮ +create proc proc_CunQian +@CardNo varchar(30),@MoneyInBank money +as +update BankCard set CardMoney = CardMoney + @MoneyInBank where CardNo = @CardNo +insert into CardExchange (CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) + values(@CardNo,@MoneyInBank,0,GETDATE()) +go + +exec proc_CunQian '420107199904054233',1000 + +--3. ģпȡǮпţȡǮʵȡǮȡǮɹ1ȡǮʧܷ-1 +create proc proc_QuQian +@CardNo varchar(30),@MoneyOutBank money +as +update BankCard set CardMoney = CardMoney - @MoneyOutBank where CardNo = @CardNo +if @@ERROR <> 0 + return -1 +insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) + values(@CardNo,0,@MoneyOutBank,GETDATE()) +return 1 +go + +declare @returnvalue int +exec @returnvalue = proc_QuQian '420107199904054233',500 +print @returnvalue + + +--4. **ѯijʱεдȡϢԼܽ**ȡܽ뿪ʼʱ䣬ʱ䣬ʾȡϢͬʱشܽȡܽ +create proc proc_selectexchange +@StartTime varchar(20),--ʼʱ +@endTime varchar(20),--ʱ +@SumIn money output,--ܽ +@SumOut money output --ȡܽ +as +select @SumIn = (select SUM(MoneyInBank) from CardExchange where ExchangeTime between +@StartTime + '00:00:00' and @endTime + '23:59:59') +select @SumOut = (select SUM(MoneyOutBank) from CardExchange where ExchangeTime between +@StartTime + '00:00:00' and @endTime + '23:59:59') +select * from CardExchange +where ExchangeTime between @StartTime + '00:00:00' and @endTime + '23:59:59' +go + +declare @SumIn money --ܽ +declare @SumOut money --ܽ +exec proc_selectexchange,@SumIn output,@SumOut output +select @SumIn +select @SumOut + +--5. ****û룬ûȷ볤<8Զ8λ + + +--(ʾ 0-9 float(rand()*10)) rand():0.0-1.0С float:ȡ +create proc procPwdUpgrade +@cardno nvarchar(20), +@pwd nvarchar(20) output +as + if not exists(select * from BankCard where CardNo=@cardno and CardPwd=@pwd) + set @pwd = '' + else + begin + if len(@pwd) < 8 + begin + declare @len int = 8- len(@pwd) + declare @i int = 1 + while @i <= @len + begin + + set @pwd = @pwd + cast(FLOOR(RAND()*10) as varchar(1)) + set @i = @i+1 + end + update BankCard set CardPwd = @pwd where CardNo=@cardno + end + end +go + + +declare @pwd nvarchar(20) = '123456' +exec procPwdUpgrade '420107199904054233',@pwd output +select @pwd