【问题标题】:Transferring MSSQL Stored Procedures to MySQL将 MSSQL 存储过程传输到 MySQL
【发布时间】:2014-06-04 10:37:12
【问题描述】:

我有一个 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 now 错误“语法错误,意外 IF”

我知道这只是一个基本程序,但我有大约两打要通过并且都显示错误,所以我希望找出我在这里做错了什么,我将能够治愈所有问题......希望如此。

【问题讨论】:

标签: mysql sql sql-server stored-procedures


【解决方案1】:

试试这个-

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

【讨论】:

  • 太棒了,知道一定有什么傻事。另外,因为它是一个过程,所以我必须添加一个 OUT 变量并设置它而不是 RETURN 值。
猜你喜欢
  • 2018-12-23
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多