【发布时间】:2014-09-22 13:06:35
【问题描述】:
mysql> Create Procedure sp_Getnewtask(IN sdate datetime, IN edate datetime,IN sid int,IN tid int,OUT outmsg varchar(50))
-> begin
-> if not exists(
-> SELECT * FROM tbltask WHERE (startdate BETWEEN sdate AND edate)OR (enddate BETWEEN sdate AND edate) OR (sdate BETWEEN startdate AND enddate) OR (edate BETWEEN startdate AND enddate) OR Sid=Sid OR Tid=tid ) then
-> set outmsg = 'ADDED SUCESSFULLY';
-> else
-> set outmsg = 'RECORD ALREADY PRESENT';
-> end if;
-> end $$
mysql> select * from tbltask;
| tblid | startdate | enddate | Sid | Lid |
| 1 | 2011-05-20 00:00:00 | 2011-05-29 00:00:00 | NULL | NULL |
1 row in set (0.00 sec)
即使数据库中没有记录,它也会显示为记录已存在,
如果我从选择查询中删除 sid,tid 它工作正常, 请提出一些想法以便正确运行输出
当我尝试调用该程序时, 它返回为,
mysql> call sp_Getnewtask('2011-05-20','2011-05-29',6,8,@outmsg);
-> select @outmsg;
-> $$
查询正常,0 行受影响(0.00 秒)
| @outmsg |
| RECORD ALREADY PRESENT |
集合中的 1 行(0.00 秒)
但我的实际结果应该是“成功添加”
【问题讨论】:
-
您在
WHERE条件中使用OR和Sid=Sid- 这永远是真的!删除OR Sid=Sid OR Tid=tid,它应该可以工作。 -
但我也想用 sid 和 tid 检查一下。
-
将您的输入变量重命名为不同于表中的字段名称。所以 inSid 和 inTid。引擎可能无法知道您是否要将变量与字段、字段与字段或变量与变量进行比较。而且我在表中没有看到 TID。我看到了 LID...所以这意味着将 TID 输入与 TID 输入进行比较...这是您想要的吗?
-
我尝试将tid更改为tutorid,将sid更改为saveid,但我遇到了同样的问题