我有一个 MSSQL 存储过程如下:-
CREATE PROCEDURE [dbo].[user_CheckEMail]
@Email nvarchar(200)
AS
BEGIN
IF EXISTS (SELECT * FROM user_Data WHERE EMail = @Email)
BEGIN
RETURN 1
END
ELSE
BEGIN
RETURN 0
END
END
在改用 MySQL 的过程中,我知道某些事情需要改变。这就是我所拥有的:-
CREATE PROCEDURE server.`user_CheckEMail`(
IN Email nvarchar(200))
BEGIN
DECLARE this_count int;
SET this_count = (SELECT COUNT(*) FROM user_Data WHERE EMail = Email)
IF (this_count > 0) THEN
RETURN 1
ELSE
RETURN 0
END IF
END
在此状态下,“int”以“语法错误,意外的 END_OF_INPUT,期待‘;’”突出显示
通过删除“;” Declare 行丢失了它的错误,但 Set 行现在显示“语法错误,意外的 SET,期待 ';'”
如果我完全删除 Declare 语句,Set 行没问题,If 行返回“语法错误,意外 IF,期待 ';'”
最后,通过放置 ';'在 Set 语句的末尾,Set 返回错误“语法错误,意外的 END_OF_INPUT,期待';'”,而 If 现在错误“语法错误,意外的 IF”
我知道这只是一个基本过程,但我有大约两打要移动并且都显示错误,所以我希望找出我在这里做错了什么,我将能够治愈所有问题......希望。
最佳答案
试试这个-
DELIMITER $$
CREATE PROCEDURE server.`user_CheckEMail`(
IN Email nvarchar(200))
BEGIN
DECLARE this_count int;
SET this_count = (SELECT COUNT(*) FROM user_Data WHERE EMail = Email);
IF (this_count > 0) THEN
RETURN 1
ELSE
RETURN 0
END IF;
END$$
默认情况下,MySQL 将分号 (;) 视为语句终止符或语句结尾。但是因为我们需要在过程体内部使用它,所以我们需要另一个不同的定界符来声明存储过程的结束。这里 DELIMITER $$
将 $$
设置为语句终止符。
关于mysql - 将 MSSQL 存储过程传输到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24035198/