MSSQL迁移MYSQL问题总结

MSSQL 迁移 MYSQL

最近在公司做了mssql迁移到mysql的测试,因为之前存在大量的存储过程,所以对迁移造成了不少的阻力。在此,把遇到的问题做个记录。

存储过程及函数写法不同

函数

功能mssql函数mysql函数
添加时间DATEADD(datepart,number,date)
date 参数是合法的日期表达式。
number 是您希望添加的间隔数
DATE_ADD(date,INTERVAL expr type)
date 参数是合法的日期表达式。
expr 参数是您希望添加的时间间隔。
返回两个日期之间的时间DATEDIFF(datepart,startdate,enddate)
第二个参数-第一个参数
DATEDIFF(date1,date2)
第一个参数-第二个参数
返回当前的日期和时间GETDATE()NOW()
是否为NULLISNULL()IFNULL()
用不同的格式显示日期/时间CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。
data_to_be_converted 含有需要转换的值。
style 规定日期/时间的输出格式。
DATE_FORMAT(date,format)
date 参数是合法的日期。
format 规定日期/时间的输出格式。

存储过程

语法mssqlmysql
定义存储过程无参CREATE PROCEDURE query
AS
CREATE PROCEDURE query()
定义存储过程有参CREATE PROCEDURE query
AS
@a varchar(20),@b varchar(20) output
CREATE PROCEDURE query(IN a VARCHAR(20),OUT b VARCHAR(20))
执行存储过程exec query ‘a’, @b outputcall query ('a',@b);
定义变量DECLARE @a INTDECLARE a INT DEFAULT 1;
事务BEGIN TRANSACTION
...
COMMIT TRANSACTION
START TRANSACTION;
...
COMMIT;
获取影响行数@@ROWCOUNTROW_COUNT()
获取事务数@@TRANCOUNT
获取异常BEGIN TRY
...
END TRY
BEGIN CATCH
...
END CATCH
IF判断IF
...
ELSE
IF THEN
...
ELSE
...
END IF
While 循环while 条件
begin
执行操作
end
WHILE 条件 DO
执行操作
END WHILE;

SQL语法不同

原生sql

语法mssqlmysql
select 赋值select a=count(*) ...select count(*) into a ...
update join setupdate A set A_NAME = B.B_NAME from A left join B ON A.B_ID = B.B_ID:先set再joinUPDATE A LEFT JOIN B ON A.B_ID = B.B_ID SET A.A_NAME = B.B_NAME;:先join再set
字段名有[],可以是关键字无[],最好不要是关键字,如果有加反引号``
表名有dbo.无dbo.

MyBits sql

亦存在原生sql和存储过程的问题。

功能mssqlmysql
分页offset(${pagination.rows}*(${pagination.page} - 1)) rows
fetch next ${pagination.rows} rows only
limit ${(pagination.page - 1)*pagination.rows},${pagination.rows};
模糊查询LIKE '%'+#{name}+'%'LIKE CONCAT('%',#{name},'%')
调用存储过程EXEC ab #{a, mode=OUT, jdbcType=INTEGER}, #{b, mode=OUT, jdbcType=INTEGER}{CALL ab (#{a, mode=OUT, jdbcType=INTEGER}, #{b, mode=OUT, jdbcType=INTEGER})}

注:mysql结束语句要加; 以及数据库配置忽略大小写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值