首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server的SELECT col1=col2在MySQL中意味着什么?

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

Stack Overflow用户
提问于 2017-05-14 23:13:38
回答 2查看 222关注 0票数 0

我在Server中有一个存储过程,如下所示:

代码语言:javascript
复制
 ....
 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“视为列名,而不是传递值。

编辑:这是我的完整代码

代码语言:javascript
复制
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')时,它都会转到语句。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-14 23:28:23

在MySQL存储过程中,我们可以使用SELECT ... INTO将返回的值赋给过程变量,从而完成类似的等效操作。

代码语言:javascript
复制
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符号(@)开头.用户定义的变量可以在过程中引用,但它们不被声明,它们的作用域在整个会话中,而不仅仅是过程。

票数 1
EN

Stack Overflow用户

发布于 2017-05-14 23:18:52

在sql-server中可以这样做。

代码语言:javascript
复制
declare @var varchar(30) 
select @var = fieldname from table
select @var 

这将打印@var值。

在MySQL中,您不只是简单地声明变量

代码语言:javascript
复制
select @var := fieldname from table
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43969652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档