我有一个包含 CASE 表达式语句的过程,如下所示:
BEGIN
....
WHILE counter < total DO
....
CASE ranking
WHEN 1 OR 51 OR 100 OR 167 THEN SET
project_name = 'alpha';
WHEN 2 THEN SET
project_name = 'beta';
WHEN 10 OR 31 OR 40 OR 61 THEN SET
project_name = 'charlie';
....
ELSE SET
project_name = 'zelta';
END CASE;
INSERT INTO project (id, name) VALUES (LAST_INSERT_ID(), project_name);
SET counter = counter + 1;
END WHILE;
END
$$
DELIMITER ;
当我调用上述过程时,情况如下OR
语句要么完全跳过,要么仅匹配列表中的第一项。我究竟做错了什么?
CASE ranking
WHEN 1 THEN 'alpha'
WHEN 2 THEN 'beta'
WHEN 10 THEN 'charlie'
ELSE 'zelta'
END CASE;
您可以使用 WHEN 所具有的表达式之一,但不能混合使用这两个表达式。
1) WHENwhen_表达式
是使用简单 CASE 格式时与 input_expression 进行比较的简单表达式。 when_expression 是任何有效的表达式。 input_expression 和每个when_expression 的数据类型必须相同或者必须是隐式转换。
2) WHEN 布尔表达式
使用搜索的 CASE 格式时计算的布尔表达式。 Boolean_expression 是任何有效的布尔表达式。
你可以编程:
1)
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
2)
CASE
WHEN ListPrice = 0 THEN 'Mfg item - not for resale'
WHEN ListPrice < 50 THEN 'Under $50'
WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
ELSE 'Over $1000'
END
但无论如何,您都可以预期变量排名将在布尔表达式中进行比较。
http://msdn.microsoft.com/en-us/library/ms181765.aspx http://msdn.microsoft.com/en-us/library/ms181765.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)