0

我有一个存储过程,它在我的本地 PC 上的语法上是可以接受的,在那里我有 MySQL 工作台 5.2.44,我认为我的本地 MySQL 版本是 5.5.29,从文件夹名称来看。这是代码,为了说明,我已将其减少到最低限度

DELIMITER $$

CREATE PROCEDURE `usp_insert_booking_test_2`(
        IN  p_dtmTimeSlot DATETIME  
     )

BEGIN 

     INSERT INTO tblBookings (dtmTimeSlot)
     SELECT p_dtmTimeSlot
     FROM tblBookings
     WHERE NOT EXISTS (SELECT * FROM tblBookings WHERE dtmTimeSlot = p_dtmTimeSlot) LIMIT 1;

END$$

如您所见,我正在努力确保不会在同一时间段创建两个预订。是的,我对桌子也有限制。腰带和牙套。当我尝试在我的远程主机(运行 MySQL 版本 5.1.68-cll)上添加此过程时,它说

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 12 行的 '' 附近使用正确的语法

第 12 行是 WHERE NOT EXISTS 行。我试过删除 LIMIT 1,这没什么区别。有没有办法编写查询以便 MySQL 5.1 接受它?

4

2 回答 2

0

我需要添加

分隔符;

到代码的末尾,如图所示。不知道为什么。

于 2013-04-18T12:13:41.633 回答
0

用这个。

DELIMITER $$

CREATE PROCEDURE `usp_insert_booking_test_2`(
    IN  p_dtmTimeSlot DATETIME  
 )

BEGIN 

 INSERT INTO tblBookings (dtmTimeSlot)
 SELECT p_dtmTimeSlot
 FROM tblBookings
 WHERE NOT IN (SELECT * FROM tblBookings WHERE dtmTimeSlot = p_dtmTimeSlot LIMIT 1);

END $$
DELIMITER ;

这里 somevalue 是您要插入的值。

于 2013-04-18T09:27:51.790 回答