MySQL8.0与SQL server 2017的技术区别(五)

本文探讨MySQL8.0与SQL Server 2017在创建存储过程和用户定义函数方面的差异。MySQL中存储过程需使用DELIMITER改变结束符,支持IN/OUT/INOUT参数,而SQL Server则需GO语句分隔,支持输入输出参数。MySQL自定义函数为标量,需设置全局变量才能创建,SQL Server则有标量和表值函数。
摘要由CSDN通过智能技术生成

MySQL8.0与SQL server 2017都是关系型数据库,两者在原理与技术方面有极高的相似度。本文主要简述笔者在学习过程中发现的两者有区别的部分,如果读者知道还有其他区别的点,欢迎进行评论补充,大家一起交流学习,共同成长!

1.在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句。为解决这个问题,通常可使用DELIMITER 语句将存储过程结束符号修改为其他字符,笔者统一将其设置为$$。
存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有一个或多个参数。MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程返回一个操作结果,而输入/输出参数既可以充当输入参数也可以充当输出参数。需要注意的是,参数的名称不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。为此,笔者统一将存储过程中的变量以$为前缀命名。
存储过程的主体部分包含在过程调用时需要执行的 SQL 语句,以关键字 BEGIN 开始,以关键字 END 结束。

drop procedure if exists sp1;
delimiter $$   
--注意:MySQL语法规定自定义符合$$和delimiter之间必须至少有一个空格
--另外,不能直接在delimiter $$ 所在行的后面添加注释,否则无法创建存储过程。真有意思。。
create procedure sp1( in $a varchar(100))  --输入参数中的 IN 可以省略。
begin
declare $n,$m int;
set $n=1,$m=2;
if ($n>$m and $a='just a demo') then  SELECT 11111;
else  SELECT 22222;
end if;
end $$       --注意:MySQL语法规定自定义符合$$和end之间可以没有一个空格
delimiter ;  --注意:MySQL语法规定分号和delimiter之间必须至少有一个空格
call sp1('just a demo');  --调用存储过程

/*在以下存储过程中,输入年份、客户名称和商品名称这三个参数,返回这个年度这个客户购买这个商品的
销售量、销售额与购买次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值