簡體   English   中英

MySQL-如果存儲過程中存在條件子句

[英]MySql - if exists clause in stored procedure

我正在根據發現的教程來開發程序的登錄/注冊模塊。 一切正常,但隨后我從MSSql切換到MySql數據庫。

問題是我無法重寫我的InsertUser過程。 此過程采用3個參數(用戶名,密碼和電子郵件),並且可以返回3個不同的值

-1(如果已使用用戶名)
-2如果已經使用了電子郵件
注冊成功后新行的id

我試圖這樣寫:

DELIMITER $$
CREATE PROCEDURE InsertUser(
    IN username VARCHAR(50),
    IN pass VARCHAR(255),
    IN email VARCHAR(50))
BEGIN
IF (SELECT Id FROM Users WHERE UserName=username) THEN
BEGIN
    SELECT -1;
END;
ELSEIF (SELECT Id FROM Users WHERE Email=email)
THEN
BEGIN
    SELECT -2;
END;
ELSE
BEGIN
    INSERT INTO Users (UserName, Password, RegDate, Email) VALUES(username, pass, CURDATE(), email);
    SELECT LAST_INSERT_ID();
END;
END IF;
END $$
DELIMITER ;

當我嘗試使用上述代碼從Visual Studio創建此過程時,出現錯誤(語法錯誤)。 但是,如果我從phpmyadmin頁面執行此操作,則沒有錯誤。 但是無論我提供什么參數,它根本都不起作用(不返回任何內容)。 我正在使用phpmyadmin頁面並執行過程選項進行測試。

這是原始的T-Sql代碼:

CREATE PROCEDURE [dbo].[Insert_User]    
      @Username NVARCHAR(20),    
      @Password NVARCHAR(20),    
      @Email NVARCHAR(50)    
AS    
BEGIN    
      SET NOCOUNT ON;    
      IF EXISTS(SELECT Id FROM Users WHERE Username = @Username)    
      BEGIN    
            SELECT -1 -- Username exists.    
      END    
      ELSE IF EXISTS(SELECT Id FROM Users WHERE Email = @Email)    
      BEGIN    
            SELECT -2 -- Email exists.    
      END    
      ELSE    
      BEGIN    
            INSERT INTO [Users]    
                     ([Username]    
                     ,[Password]    
                     ,[Email]    
                     ,[RegDate])    
            VALUES    
                     (@Username    
                     ,@Password    
                     ,@Email    
                     ,GETDATE())                       
            SELECT SCOPE_IDENTITY() -- UserId 
     END    
END

有任何想法嗎?

6.10.1從連接器/網絡使用存儲的例程

...

與命令行和GUI客戶端不同,在Connector / Net中創建存儲過程時,不需要指定特殊的分隔符。

...

MySQL(命令行)中的一個選項:

DELIMITER $$

CREATE PROCEDURE `InsertUser` (
    IN `_username` VARCHAR(50),
    IN `_pass` VARCHAR(255),
    IN `_email` VARCHAR(50)
)
BEGIN
    IF (SELECT `Id` FROM `Users` WHERE `UserName` = `_username`) THEN
        SELECT -1;
    ELSEIF (SELECT `Id` FROM `Users` WHERE `Email` = `_email`) THEN
        SELECT -2;
    ELSE
        INSERT INTO `Users` (`UserName`, `Password`, `RegDate`, `Email`)
        VALUES (`_username`, `_pass`, CURDATE(), `_email`);
        SELECT LAST_INSERT_ID();
    END IF;
END$$

DELIMITER ;

謝謝,但我自己解決了。 我不知道為什么我如此迫切希望使用EXISTS函數:)我擺脫了它,現在它可以工作了:

BEGIN
    IF(SELECT Id FROM Users WHERE UserName=username) IS NOT NULL THEN
        SELECT -1;
    ELSEIF (SELECT Id FROM Users WHERE Email=email) IS NOT NULL THEN
        SELECT -2;
    ELSE
        INSERT INTO Users(UserName, Password, RegDate, Email) VALUES (username, pass, CURDATE(), email);
        SELECT LAST_INSERT_ID();
    END IF;
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM