我在SQL Server中有一个存储过程,如下所示:
....
Declare UserId VARCHAR(30);
Select UserId=nrID
from tblUsers
where Email = in_email;
UserId = nrID
是否意味着来自nrID
的{{1}}的值传递到tblUsers
UserId
的位置?
如果是这样,MySQL中的等价物是什么?因为看起来MySQL正在看到" UserId = nrID"作为列名而不传递值。
编辑:这是我的完整代码
email=in_email
但是,每次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 ;
它总是进入ELSE语句。
答案 0 :(得分:1)
在sql-server中你做
declare @var varchar(30)
select @var = fieldname from table
select @var
这将打印@var值
在MySQL中,你不能简单地声明变量select @var := fieldname from table
答案 1 :(得分:1)
在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符号(@
)开头。用户定义的变量可以在过程中引用,但它们不会被声明,并且它们的范围在整个会话中,而不仅仅是过程。