MySQL - 使用IF EXISTS似乎打破了我的说法

时间:2016-08-26 21:13:41

标签: mysql

我有一个存储例程,用于为我的应用程序创建一个新的桌面登录令牌,用于验证用户是否必须重新登录(无论如何这不重要)。

重要的是我正在使用的SQL似乎不喜欢我。

我只使用过T-SQL,因为我是一名专注于数据库SSMS的.NET开发人员,但这次我愚蠢地决定使用没有XD经验的MySQL

以下是代码:

CREATE PROCEDURE `insertNewToken`(IN `Username` VARCHAR(150), IN `Token` VARCHAR(500))
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''

IF EXISTS(SELECT *
                FROM desktopTokens
                WHERE desktopTokens.AssignedUsername = Username) THEN
    BEGIN
        UPDATE desktopTokens
        SET desktopTokens.TokenValue = Token
        WHERE desktopTokens.AssignedUsername = Username
    END
ELSE
    BEGIN
        INSERT INTO desktopTokens
        VALUES
        (Username, Token)
    END

我一直在第2行和第15行遇到错误,但不明白为什么!

注意:令牌和用户名是SP变量

1 个答案:

答案 0 :(得分:0)

尝试:

DELIMITER $$
CREATE PROCEDURE `insertNewToken`(
    IN `Username` VARCHAR(150), 
    IN `Token` VARCHAR(500)
)
BEGIN
    IF EXISTS(SELECT *
            FROM desktopTokens
            WHERE desktopTokens.AssignedUsername = Username) THEN

      UPDATE desktopTokens
      SET desktopTokens.TokenValue = Token
      WHERE desktopTokens.AssignedUsername = Username
      ;
    ELSE
      INSERT INTO desktopTokens
      VALUES
      (Username, Token)
      ;
    END IF;
END $$
DELIMITER ;