我有一个像这样的存储过程:
delimiter //
create procedure UserRole_IsUserAdmin(userID int)
begin
if userID is null then
select 'User ID is required.';
else
if (
select
count(UserRoleCode)
from
UserRole
where
UserID = userID
and RoleCode = 1
and VendorCode is null
and NPOCode is null
) > 0 then
select true;
else
select false;
end if;
end if;
end;
//
if 语句中的子查询有时会返回 0(例如,当 userID 为 5 时),有时会返回 1(例如,当 userID 为 1 时)。问题是存储过程总是选择true。我一直无法弄清楚为什么,这让我发疯。我不知道我在 if 语句中做错了什么,还是什么。
调用过程的代码:
call UserRole_IsUserAdmin(5);
/*Should return false*/
call UserRole_IsUserAdmin(1);
/*Should return true*/
根据要求,这是表格的数据
UserID 是用户的 FK ID,RoleCode 是用户所在角色的 FK ID。UserRoleCode 只是一个自增的 PK。如果存在 ncode 和 vcode 为空且角色代码为 1 的记录,则该过程应返回 true。