sql Sever的存储过程转换为mysql的
来源:互联网 发布:csgo淘宝黄金版 编辑:程序博客网 时间:2024/04/26 03:42
from : http://www.cnblogs.com/huxiaolin/p/4671039.html
总体来说,sql sever和Mysql的存储过程的思路都是一样的,但是在语法和结构上还是有很大的区别的。
1. 在mysql中写存储过程所有的dbo都要去掉。
2. 每一个sql语句后面都需要加上;否则报错;
4. 再说参数,在MSSQL中我们一般会这么定义参数
CREATE
PROCEDURE
PROC_ST
(@operator
varchar
(300),
@ProcDate datetime,
@ErrorLog
varchar
(8000)
OUTPUT
)
但是在mysql中这种格式是不可以的;
首先在mysql中输入参数是in来表示,输出参数是out表示,如果不写,默认是in,其次在mysql中是没有@符号的,所以所有的@符号都要去掉
上述存储过程改写成mysql的话
create
PROCEDURE
PROC_ST
(
in
operator
varchar
(300),
in
ProcDate datetime,
out
ErrorLog
varchar
(8000)
)
5.关于时间的问题
5.1 获取时间格式
在MSSQL中我们来获取时间一般用CONVERT来表示,例如
set
@YearMonth =
CONVERT
(
varchar
(6),@ProcDate,112);
这句话的意思就是获取时间的年月并且格式是yyyymm的,112代表的是一种格式;
但是在mysql中我修改的时候却一直报错,所以我换了一种写法
year
(now())*100+
month
(now())
这样就可以了;
5.2
转换时间格式
同样的,在MSSQL中用CONVERT(varchar(6),参数,112) = @YearMonth 就可以使用,但是在MYSQL中我用的是cast强制转换才可以
CAST
(
REP.FACT_DATE
AS
CHAR
(6) )
6.
关于if的使用
在MSSQL中用
If()
Begin
程序片段
End
Else
Begin
程序片段
End就可以;
但是在Mysql中是不认的,if的后面必须有then,而且每一个else if的后面必须有;作为结束符号,否则不管你怎么调试也是过不去的
下面的是我改写的一个函数,比较简单,主要是比较一下语法
CREATE
FUNCTIONLOAN_PERIOD
(
begindate
int
,
enddate
int
)
RETURNSvarchar(8000)
BEGIN
if(enddate-begindate <=
'3'
)
then
return
'10'
;
end
if;
if(enddate-begindate>
'3'
andenddate-begindate <=
'6'
)
then
return
'20'
;
end
if;
if(enddate-begindate>
'6'
andenddate-begindate <=
'12'
)
then
return
'30'
;
end
if;
return
'40'
;
END
7.关于在时间的增加或者减少
我们一般在MSSQL中想得到日期的上一个月一般会这么写
CONVERT
(
VARCHAR
(6),DATEADD (
"Month"
, -1, @ProcDate), 112)
DATEADD是MSSQL的内置函数;
但是在mysql中是没有这个函数的,那我们应该怎么办呢,别着急,在mysql中有DATE_SUB函数,基本上也能满足我们的需求,上面这句话改写完成后
CAST
(DATE_SUB(ProcDate,INTERVAL1
MONTH
)
AS
CHAR
(6))
8.关于表变量
在MYsql中时不存在表变量这个概念的,但是却可以用临时表来代替,在Mysql中我们创业临时表一般用
CREATEtemporary
table tempTotal 来进行创建,还有一点好处,就是临时变量在存储过程执行完会自动释放,不会占用大量内存;
9.在MSSQL中会常常用到下面这个声明
DECLARE@temp
VARCHAR (MAX);
但是在mysql中没有max这个概念,我一般会用varcahr(8000)来替代,网上众说纷纭,说varchar最大值多少的都有,我没试验过,改写的时候慎用。
10.在MSSQL中金融产品化会常常用到下面这个声明
DECLARE@temp
VARCHAR (MAX);
但是在mysql中没有max这个概念,我一般会用varcahr(8000)来替代,网上众说纷纭,说varchar最大值多少的都有,我没试验过,改写的时候慎用。
11. 在mysql中没有isnull函数,所以我们用ifnull来代替,用法一样;
以上就是我改写的过程中碰到的一些问题,希望对大家能有所帮助吧!
- sql Sever的存储过程转换为mysql的
- sql Sever的存储过程如何转换为mysql
- sql sever和mysql数据库的存储过程转换过程 scope_identity() last_insert_id();
- sql sever 和mysql的存储过程的日期时间转换DATEDIFF
- 【SQL Sever】存储过程
- 使用存储过程演练SQL SEVER的三层安全模型
- 查询SQL SEVER最近修改的存储过程及表
- 【SQL Sever】 存储过程的创建和执行
- 分页存储过程 SQL Sever
- Sql Sever记录的行列转换
- 将sql存储过程转换成mysql存储过程要改动的地方积累
- SQL Sever 2005创建 CLR 存储过程
- SQL Sever 存储过程简要教程
- sql sever 2005 系统存储过程
- 存储过程 sql sever
- VB.NET调用SQL Sever存储过程
- 编写sql sever存储过程随笔
- sql sever 列转行存储过程
- 49-多态的概念和意义
- HTML
- 论刚入门的菜鸟如何学网络安全,如何学习渗透测试,网络安全菜鸟的学习之旅
- java.security.cert.CertificateException: Issuer class type invalid or Subject class type in valid
- android屏幕适配,自动生成不同的dimens.xml详解
- sql Sever的存储过程转换为mysql的
- Docker-4.安装Docker
- Xftp连接阿里云服务器失败
- layui的demo
- Swift CoreData增删改查
- Ubuntu 16.04 LTS下用apt搭建LAMP环境
- react-native进入姿势
- 从0到1深入浅出自定义控件的点点滴滴
- 虚拟机Ubuntu终端中划词选择时命令终止(^C)的解决办法