MySQL 6.0.11存储过程中用SET替代SELECT从表取值赋变量的方法
MySQL用SET语句从表查询结果赋值变量的解决方案
MySQL 不支持你尝试的直接在SET赋值表达式后加FROM/WHERE子句的语法,要实现用SET从表取数给变量赋值,需要将查询逻辑封装为仅返回单个值的标量子查询。
正确写法示例
1. 给用户变量赋值
SET @IRid := 1; SET @iCID := 0; -- 将查询逻辑用括号包裹为子查询放在赋值右侧 SET @iCID := (SELECT Id FROM tbl_custidData WHERE RID = @IRid);
2. 给存储过程局部变量赋值
DECLARE IRid,iCID INT; SET IRid = 1; SET iCID = 0; -- 同样使用标量子查询实现赋值 SET iCID := (SELECT Id FROM tbl_custidData WHERE RID = IRid);
注意事项
- 标量子查询必须保证最多返回1行1列的结果,建议查询条件
RID对应的字段设为主键或唯一索引,否则查询返回多行时会触发报错。 - 如果查询无匹配结果,变量会被赋值为
NULL,可配合IFNULL设置默认值,示例:
SET @iCID := IFNULL((SELECT Id FROM tbl_custidData WHERE RID = @IRid), 0);
- 如果需要同时查询多个字段赋值给多个变量,更推荐使用
SELECT ... INTO语法,写法更简洁:
SELECT Id, CustName INTO @iCID, @iCName FROM tbl_custidData WHERE RID = @IRid;
内容的提问来源于stack exchange,提问作者ashok
相关产品推荐
相关产品推荐

