繁体   English   中英

将MSSQL存储过程传输到MySQL

[英]Transferring MSSQL Stored Procedures to MySQL

我有一个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,期望';'”

删除“;” “声明”行丢失了它的错误,但是“设置”行现在显示“语法错误,意外的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 $$设置$$作为语句终止符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM