将MSSQL存储过程传输到MySQL

时间:2014-06-04 10:37:12

标签: mysql sql sql-server stored-procedures

我有一个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 line就可以了,If行返回“语法错误,意外IF,期待';'”

最后,放置';'在Set语句的末尾,Set返回错误“语法错误,意外的END_OF_INPUT,期待';'”,而If now errors“语法错误,意外的IF”

我知道这只是一个基本的程序,但我有大约二十几个要移动,所有都显示错误,所以我希望找到我在这里做错了什么,我将能够治愈所有问题.....希望。

1 个答案:

答案 0 :(得分:0)

试试这个 -

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 $$$$设置为语句终止符。