我在Server中有一个存储过程,如下所示:
....
Declare UserId VARCHAR(30);
Select UserId=nrID
from tblUsers
where Email = in_email;这个UserId = nrID是否意味着来自tblUsers的nrID的值被传递到email=in_email所在的UserId?
如果是,MySQL中的等效值是什么?因为MySQL似乎将"UserId=nrID“视为列名,而不是传递值。
编辑:这是我的完整代码
DELIMITER //
create procedure spResetPassword (IN in_email VARCHAR (100))
Begin
Declare UserId VARCHAR(30);
Declare GUID varchar(64);
Select nrId as UserId #nrID is in the tblUsers
from tblUsers
where Email = in_email;
if (UserId IS NOT NULL) then
Set GUID = UUID();
Insert into tblResetPasswordRequests(ID, UserID, ResetRequestDateTime) Values(GUID, UserId, NOW());
Select 1 as ReturnCode, GUID as UniqueId, in_email as Email;
else
SELECT 0 as ReturnCode, NULL as UniqueId, NULL as Email;
end if;
end; //
DELIMITER ;但是,每次我call spResetPassword('existingemail@gmail.com')时,它都会转到语句。
发布于 2017-05-14 23:28:23
在MySQL存储过程中,我们可以使用SELECT ... INTO将返回的值赋给过程变量,从而完成类似的等效操作。
CREATE PROCEDURE foo(IN in_email VARCHAR(255))
AS
BEGIN
DECLARE UserId VARCHAR(30);
SELECT t.nrID
FROM tblUsers t
WHERE t.Email = in_email
ORDER BY t.nrID
LIMIT 1
INTO UserId ;变量可以在MySQL存储程序的上下文中声明。这些变量仅在封闭块中“作用域中”。过程中声明的变量在过程之外不可用。
MySQL还提供了用户定义的变量,这些变量的名称以at符号(@)开头.用户定义的变量可以在过程中引用,但它们不被声明,它们的作用域在整个会话中,而不仅仅是过程。
发布于 2017-05-14 23:18:52
在sql-server中可以这样做。
declare @var varchar(30)
select @var = fieldname from table
select @var 这将打印@var值。
在MySQL中,您不只是简单地声明变量
select @var := fieldname from tablehttps://stackoverflow.com/questions/43969652
复制相似问题