SQL Server的SELECT col1 = col2在MySQL中意味着什么?

时间:2017-05-14 23:13:38

标签: mysql sql sql-server

我在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语句。

2 个答案:

答案 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符号(@)开头。用户定义的变量可以在过程中引用,但它们不会被声明,并且它们的范围在整个会话中,而不仅仅是过程。