mysql - 将 MSSQL 存储过程传输到 MySQL

标签 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 行没问题,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/

相关文章:

sql - 想要在 Rails 中使用 Count、Group by 和 Order DESC 进行订购

mysql - 运行减法,但仅当金额仍高于限制时才进行减法

sql - 组合没有唯一值的行

sql-server - BCP 导出到 XML,打开 XML 会出现错误 : Extra content at the end of the document

php - 将字符串添加到数据库

PHP:字符串数据-属性被分割

mysql - 迁移到 MySQL 且指定的架构无效

MySQL:长时间运行的 LEFT JOIN 查询性能

sql - Postgres 错误 : More than one row returned by a subquery used as an expression

支持 SQL Server 的 Java 内存数据库