存储过程中的MySql-if-exists子句
我正在根据我找到的教程编写程序的登录/注册模块。 一切正常,但后来我从MSSql切换到MySql数据库 问题是我无法重写插入程序。此过程接受用户名、密码和电子邮件3个参数,可以返回3个不同的值 -1如果用户名已被使用 -2如果电子邮件已被使用 如果注册成功,则为新行的id 我试着这样写:存储过程中的MySql-if-exists子句,mysql,stored-procedures,Mysql,Stored Procedures,我正在根据我找到的教程编写程序的登录/注册模块。 一切正常,但后来我从MSSql切换到MySql数据库 问题是我无法重写插入程序。此过程接受用户名、密码和电子邮件3个参数,可以返回3个不同的值 -1如果用户名已被使用 -2如果电子邮件已被使用 如果注册成功,则为新行的id 我试着这样写: DELIMITER $$ CREATE PROCEDURE InsertUser( IN username VARCHAR(50), IN pass VARCHAR(255), IN e
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页面和executeprocedure选项来测试它
以下是原始的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
有什么想法吗
与命令行和GUI客户端不同,在Connector/Net中创建存储过程时,不需要指定特殊的分隔符
MySQL命令行中的一个选项:
分隔符$$
创建过程“InsertUser”
在`\u username`VARCHAR50中,
在“u pass”VARCHAR255中,
在``电子邮件` VARCHAR50中
开始
如果从'Users'中选择'Id',其中'UserName'='u UserName',则
选择-1;
否则,请从“用户”中选择“Id”,其中“电子邮件”=`U电子邮件`
选择-2;
其他的
在“用户”`UserName`、`Password`、`RegDate`、`Email`中插入`
值“%u username”、“u pass”、“CURDATE”、“email”;
选择最后一个插入ID;
如果结束;
结束$$
定界符;
谢谢,但我自己解决了。我不知道为什么我这么想使用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
避免将变量和参数命名为表的列。我刚刚意识到我们的解决方案完全相同。谢谢