From 99ba4604d65f9053dbec1a5f606e131566af7422 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B0=B8=E6=BD=98?= <1924969174@qq.com> Date: Mon, 10 Oct 2022 03:45:49 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E5=88=98=E6=B0=B8=E6=BD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘永潘 <1924969174@qq.com> --- ...0\345\202\250\350\277\207\347\250\213.sql" | 96 +++++++++++++++++++ ...2\344\271\211\345\207\275\346\225\260.sql" | 14 +++ 2 files changed, 110 insertions(+) create mode 100644 "16\345\210\230\346\260\270\346\275\230/\344\275\234\344\270\232/2022-10-09\347\254\254\345\215\201\344\270\200\346\254\241\344\275\234\344\270\232\345\255\230\345\202\250\350\277\207\347\250\213.sql" create mode 100644 "16\345\210\230\346\260\270\346\275\230/\344\275\234\344\270\232/20222-10-07\347\254\254\345\215\201\346\254\241\344\275\234\344\270\232\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.sql" diff --git "a/16\345\210\230\346\260\270\346\275\230/\344\275\234\344\270\232/2022-10-09\347\254\254\345\215\201\344\270\200\346\254\241\344\275\234\344\270\232\345\255\230\345\202\250\350\277\207\347\250\213.sql" "b/16\345\210\230\346\260\270\346\275\230/\344\275\234\344\270\232/2022-10-09\347\254\254\345\215\201\344\270\200\346\254\241\344\275\234\344\270\232\345\255\230\345\202\250\350\277\207\347\250\213.sql" new file mode 100644 index 0000000..ea4c43c --- /dev/null +++ "b/16\345\210\230\346\260\270\346\275\230/\344\275\234\344\270\232/2022-10-09\347\254\254\345\215\201\344\270\200\346\254\241\344\275\234\344\270\232\345\255\230\345\202\250\350\277\207\347\250\213.sql" @@ -0,0 +1,96 @@ +-- 1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 +select * from AccountInfo +select * from BankCard +select * from CardExchange +go +create proc proc_GetMin +as +begin + select CardNo 银行卡号, RealName 姓名,CardMoney 账户余额 from AccountInfo join BankCard on BankCard.AccountId=AccountInfo.AccountId + where CardMoney =(select min(CardMoney) from BankCard) +end +go +exec proc_GetMin +drop procedure proc_GetMin +-- 2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 +create proc proc_GeiMoneyBank +@cardNo varchar(30), +@MoneyInBank money +as +begin + update BankCard set CardMoney+=@MoneyInBank where CardNo=@cardNo + insert into CardExchange (CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) + values (@cardNo,@MoneyInBank,0,GETDATE()) +end +go +exec proc_GeiMoneyBank '6225125478544587',3000 +drop proc proc_GeiMoneyBank +-- 3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 +go +create proc proc_GeiMoneyBank +@cardNo varchar(30), +@MoneyOutBank money +as +begin + update BankCard set CardMoney-=@MoneyOutBank where CardNo=@cardNo + if (@@ERROR!=0) + return -1 + insert into CardExchange (CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) + values (@cardNo,@MoneyOutBank,0,GETDATE()) + return 1 +end +go +declare @MoneyOutBank int +exec @MoneyOutBank = proc_GeiMoneyBank '6225547854125656',1000 +print @MoneyOutBank +drop proc proc_GeiMoneyBank +-- 4. **查询出某时间段的银行存取款信息以及存款总金额**,取款总金额,传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 +go +create proc proc_Get + @startTime smalldatetime, + @endTime smalldatetime, + @SumIn money output, + @SumOut money output +as +begin + select @SumIn =sum(MoneyInBank),@SumOut=sum(MoneyOutBank)from CardExchange + where ExchangeTime between @startTime and @endTime + select * from CardExchange +where ExchangeTime between @startTime+' 00:00:00' and @endTime+' 23:59:59' +end +go +declare @SumIn money +declare @SumOut money +exec proc_Get '2022-09-20','2022-09-20',@SumIn output,@SumOut output +drop proc proc_Get +-- 5. **密码升级**,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码 +-- (提示:随机生成 0-9 的整数: float(rand()*10)) rand():随机生成0.0-1.0的小数 float:向下取整) +go +create proc proc_PwdUpgrade +@cardno nvarchar(20), +@pwd nvarchar(20) output +as +begin + 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 +end +go +declare @pwd nvarchar(20) = '123456' +exec proc_PwdUpgrade '6225547854125656',@pwd output +select @pwd +drop proc proc_PwdUpgrade diff --git "a/16\345\210\230\346\260\270\346\275\230/\344\275\234\344\270\232/20222-10-07\347\254\254\345\215\201\346\254\241\344\275\234\344\270\232\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.sql" "b/16\345\210\230\346\260\270\346\275\230/\344\275\234\344\270\232/20222-10-07\347\254\254\345\215\201\346\254\241\344\275\234\344\270\232\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.sql" new file mode 100644 index 0000000..00290cd --- /dev/null +++ "b/16\345\210\230\346\260\270\346\275\230/\344\275\234\344\270\232/20222-10-07\347\254\254\345\215\201\346\254\241\344\275\234\344\270\232\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.sql" @@ -0,0 +1,14 @@ +--ÿλͬѧ��ƽ���ɼ� +use TEST04 +select * from Student +go +create function func_Getsvg(@name varchar(20)) +returns decimal(5,2) +as +begin + declare @avg decimal(5,2) = (select avg(score) from SC where [SId] = (select [SId] from Student where Sname = @name) ) + return @avg +end +go +select dbo.func_Getsvg('����') +drop function func_Getsvg -- Gitee From 401a1f0df9f12cc0889374b966e637b58c7f8353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B0=B8=E6=BD=98?= <1924969174@qq.com> Date: Mon, 10 Oct 2022 03:46:07 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E5=88=98=E6=B0=B8=E6=BD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘永潘 <1924969174@qq.com> --- ...32\344\271\211\345\207\275\346\225\260.md" | 36 ++++++ ...30\345\202\250\350\277\207\347\250\213.md" | 110 ++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 "16\345\210\230\346\260\270\346\275\230/\347\254\224\350\256\260/2022-10-07\347\254\254\345\215\201\346\254\241\347\254\224\350\256\260\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.md" create mode 100644 "16\345\210\230\346\260\270\346\275\230/\347\254\224\350\256\260/2022-10-09\347\254\254\345\215\201\344\270\200\346\254\241\347\254\224\350\256\260\345\255\230\345\202\250\350\277\207\347\250\213.md" diff --git "a/16\345\210\230\346\260\270\346\275\230/\347\254\224\350\256\260/2022-10-07\347\254\254\345\215\201\346\254\241\347\254\224\350\256\260\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.md" "b/16\345\210\230\346\260\270\346\275\230/\347\254\224\350\256\260/2022-10-07\347\254\254\345\215\201\346\254\241\347\254\224\350\256\260\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.md" new file mode 100644 index 0000000..370e0aa --- /dev/null +++ "b/16\345\210\230\346\260\270\346\275\230/\347\254\224\350\256\260/2022-10-07\347\254\254\345\215\201\346\254\241\347\254\224\350\256\260\350\207\252\345\256\232\344\271\211\345\207\275\346\225\260.md" @@ -0,0 +1,36 @@ +## 函数 +函数分为(1)系统函数:,(2)自定义函数(方法:将一个功能封装成可重用的函数)。 +其中自定义函数又可以分为(1)标量值函数(返回单个值),(2)表值函数(返回查询结果) +本文主要介绍自定义函数的使用。 + +#### 标量值函数 +语法结构: +CREATE FUNCTION function_name(@parameter_name parameter_data_type) --(@参数名 参数的数据类型) +RETURNS date_type --返回返回值的数据类型 +[AS] +BEGIN + function_body --函数体 + RETURN 表达式; --必须要有的 +END +定义函数要求实现: +实现两个值的加和 +使用函数求某门课的平均成绩 + +#### 表值函数 +语法结构: +create function 名称 +([{@参数名称 参数类型[=默认值]}[,n]]) +returns @局部变量 table(参数名 参数类型) +[with encryption] +[as] +begin +函数体 +return 函数返回值 +end + +删除自定义函数 +DROP function 函数名 +总结:自定义函数 +1.标量值函数: 1.returns 数据类型 2.return 标量(某个值) + +2.多语句表值函数 1.returns 表名 table(字段 数据类型) 2.return diff --git "a/16\345\210\230\346\260\270\346\275\230/\347\254\224\350\256\260/2022-10-09\347\254\254\345\215\201\344\270\200\346\254\241\347\254\224\350\256\260\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/16\345\210\230\346\260\270\346\275\230/\347\254\224\350\256\260/2022-10-09\347\254\254\345\215\201\344\270\200\346\254\241\347\254\224\350\256\260\345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000..68711dc --- /dev/null +++ "b/16\345\210\230\346\260\270\346\275\230/\347\254\224\350\256\260/2022-10-09\347\254\254\345\215\201\344\270\200\346\254\241\347\254\224\350\256\260\345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,110 @@ +## 存储过程(Stored Procedure) +#### 什么是存储过程 +存储过程是**预编译**SQL语句集合,这些语句存储在一个名称(存储过程的名称)下并作为单元来处理。存储过程代替了传统的逐条执行SQL语句的方式,一个存储过程中可以包含查询、插入、删除、更新等操纵的一系列SQL语句,当这个存储过程被调用执行时,这些操作也会同时执行。 + +封装好 --> 调用 +#### 存储过程的分类 + +##### 系统存储过程 + + 系统存储过程是用来管理SQL Server与显示有关数据库和用户的信息的存储过程。 +常见的系统存储过程有 +```sql +sp_databases 列出服务上的所有数据库 +sp_helpdb --报告有关指定数据库或所有数据库的信息 +sp_renamedb 更改数据库的名称 +sp_tables --返回当前环境下可查询的对象的列表 +sp_columns 返回某个表列的信息 +sp_help --返回某个表的所有信息 +sp_helpconstraint 查看某个表的约束 +sp_helpindex --查看某个表的索引 +sp_stored_procedures 列出当前环境中的所有存储过程 +sp_password --添加或修改登录账户的密码 +sp_rename 重命名存储过程 +sp_helptext 显示默认值,未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。 +``` + +##### 自定义存储过程 +**创建存储过程** +1.没有输入参数,没有输出参数的存储过程。 +```sql +create proc <存储过程名称> +as + +go +``` + +2.有输入参数,没有输出参数的存储过程 + +```sql +create proc <存储过程名称> +<变量1> <数据类型> +<变量2> <数据类型> +... +as + +go +``` + + + +3.有输入参数,没有输出参数,但是有返回值的存储过程(返回值必须整数)。 +```sql +create proc <存储过程名称> +<变量1> <数据类型> +<变量2> <数据类型> +... +as + +return 整数 +go +``` + +4.有输入参数,有输出参数的存储过程 & 一个变量具备同时输入输出参数的存储过程 +```sql +create proc <存储过程名称> +<变量1> <数据类型> output +<变量2> <数据类型> output +... +as + +return 整数 +go +``` + +**执行存储过程** +```sql +--无参 +exec <存储过程名称> +--带参 +exec <存储过程名称> <形参1>,<形参2>,... +--带参带返回值 +declare @变量 +exec @变量 = <存储过程名称> <形参1>,<形参2>,... +--有输入参数,有输出参数的存储过程 +declare @变量 +exec <存储过程名称> <形参1>,<形参2>,@变量 output +--一个变量同时具备输入输出功能 +declare @变量 <数据类型> = 值 +exec <存储过程名称> <形参1>,<形参2>,@变量 output +``` + +**删除存储过程** +```sql +drop procedure <存储过程名称> +``` + +#### 存储过程的优点 +允许模块化程序设计 +执行速度更快 +减少网络流通量 +提高系统安全性 + +#### 存储过程与函数的区别 +1.储存过程可以有返回值也可以无返回值。函数必须有返回值。 +2.存储过程的实现比较复杂,而函数的实现比较有针对性。 +3.储存过程可以输入输出参数,而函数只可以输入参数。 +4.过程允许在其中选择以及DML语句,而函数只可以在其中select语句。 +5.可以在存储过程中调用函数,不可以在函数中调用存储过程。 +6.函数可以作为条件在语句中使用,但是存储过程不可以。 + -- Gitee