SqlServer转MySQL需修改

sql
  1. MySQL支持单、双、反引号;SqlServer仅支持引号。
  2. MySQL获取时间now();SqlServer是getdate()
  3. MySQL支持判断主键是否存在,进行插入或更新。INSERT into users (userID,userName,password) VALUES (1,’jmj’,’123’) ON DUPLICATE KEY UPDATE userName =‘jmj’, password =123
  4. MySQL用limit 0,10分页,SqlServer用top 10分页,或select ROW_NUMBER() OVER(order by ${xxx}) as rownumber,判断rownumber>< 。
  5. MySQL用SUBSTRING/SUBSTR截取字符串,SQLServer仅使用SUBSTRING
  6. MySQL用Length取字符串长度,SQLServer用Len
  7. MySQL用CONCAT拼接字符串,SqlServer用+/CONCAT
  8. MySQL用DATE_FORMAT(NOW(),’%y%m%d’)格式化日期,SqlServer用CONVERT(VARCHAR(10),GETDATE(),110)格式化日期。
  9. Mysql用IFNULL判空赋值,SqlServer用ISNULL。MySQL用ISNULL判空返回Boolean。
  10. Mysql用UPPER(UUID())生成36位id,SqlServer用NEWID()
  11. Mysql用DATE_ADD(NOW(),INTERVAL -table.a MONTH)操作时间,SqlServer用DATEADD(MONTH, -table.a, GETDATE())
存储过程
  1. MySQL用
CREATE PROCEDURE P_CYCLEDETAIL(IN CycleBegin datetime,IN CycleEnd datetime) 
BEGIN 
DECLARE SqlStr  LONGTEXT DEFAULT ''; 
SET @AAA = 'ada';
SET @@autocommit = 1;
END

定义参数:
跟在过程名称后边的是参数变量,IN/OUT/INOUT代表输入/输出/都行;
DECLARE 的定义的是过程变量,只能自己使用;
一个@是会话变量,全部会话内有效(包括子会话);
两个@是全局变量,不能定义只能使用,又称系统变量。

SqlServer用:

ALTER  PROCEDURE [dbo].[P_CYCLEDETAIL]
@CycleBegin DATETIME,    //参数变量
@CycleEnd DATETIME 
AS 
Declare @SqlStr nvarchar(max)   //局部变量
select @@ERROR    //系统变量
BEGIN
END
  1. MySQL需要用;分割语句
  2. MySQL使用call P_CYCLEDETAIL(null,null)执行;SqlServer使用exec dbo.P_CYCLEDETAIL null,null 或者 {call P_CYCLEDETAIL(NULL, NULL)}
  3. MySQL开启事务,在BEGIN 之后:
BEGIN 

DECLARE t_error INTEGER DEFAULT 0;   //定义是否异常
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;   //异常赋值  
START TRANSACTION;  //开启事务
IF t_error = 1 THEN   //判断提交或回滚
	ROLLBACK;
ELSE
	COMMIT;
END IF;    //注意IF语句的写法

END 

SqlServer在BEGIN 后:

BEGIN 

TRANSACTION    //开启事务
IF @@ERROR=0    //直接引用系统变量判断
	BEGIN
		COMMIT TRANSACTION
	END
ELSE
	BEGIN
		ROLLBACK TRANSACTION
	END  //注意这里的END

注意END,MySQL是begin end,SqlServer是begin if begin end。
6. MySQL创建临时表

CREATE TEMPORARY TABLE IF NOT EXISTS TAB(
	stationname VARCHAR(100),
	assertsowner VARCHAR(100),
	points INT(11)
);
TRUNCATE TABLE TAB;   //清空表
DROP TABLE TAB;   //删除表

SqlServer:

select a,b,c INTO #TAB from Table    //TAB即为临时表,注意使用时也要带上#
DROP TABLE #TAB
  1. MySQL使用GROUP_CONCAT()去拼接,SqlServer使用+=即可。
//MySQL
set @SqlStr = 
	(select 
		GROUP_CONCAT('max(case assertsowner when ''',assertsowner,''' then points else 0 end) as ''',assertsowner,'''') 
	from TAB);
//SqlServer
select @SqlStr+=
	',max(case assertsowner when '''+assertsowner+''' then points else 0 end) as '''+assertsowner+'''' from #TAB 
  1. 关于执行拼接的sql:
//MySQL
prepare stmt from @SqlStr;  //预处理
EXECUTEstmt;     //执行
deallocate prepare stmt;  //释放
//SqlServer
exec(@SqlStr)  //执行
  1. 以下为查资料,未实验过
    • SqlServer有GO、AS、SET QUOTED_IDENTIFIER ON、SET ANSI_NULLS ON
    • SqlServer用return,MySQL要用select 0;。
    • SqlServer可以用select a=b赋值,MySQL用select a into b。
    • SqlServer用update from,MySQL用update a inner join b。
    • SqlServer用convert,MySQL用CONVERT/CAST。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值