更新预订表中一项预订的 MySQL 过程会更改预订槽列中的所有值

问题描述 投票:0回答:2

我不知道为什么我会遇到这样的麻烦,但我无法让它正常工作。我正在尝试创建一个存储过程来更新我选择的 bookingid 的预订日期时间。我有这个:

DELIMITER //

CREATE PROCEDURE UpdateBooking (
IN BookingID INT, 
IN NewSlotTime DATETIME
)
BEGIN 
    DECLARE ConfirmationMessage VARCHAR (255);
    DECLARE UpdatedBookingID INT;
    
   
    SET UpdatedBookingID = BookingID;
    
    UPDATE bookings
    SET BookingSlot = NewSlotTime
    WHERE BookingID = UpdatedBookingID;
    
    
    SET ConfirmationMessage = CONCAT('Booking ID ', UpdatedBookingID, ' has been updated');
    
SELECT ConfirmationMessage as Confirmation;

END; 
//
DELIMITER ;

CALL UpdateBooking (37, '2023-09-14 10:45:00');

我也尝试过:

DELIMITER //

CREATE PROCEDURE UpdateBooking (
    IN BookingID INT, 
    IN NewSlotTime DATETIME
)
BEGIN 
    DECLARE ConfirmationMessage VARCHAR (255);
    
    UPDATE bookings
    SET BookingSlot = NewSlotTime
    WHERE BookingID = BookingID;
    
    SET ConfirmationMessage = CONCAT('Booking ID ', BookingID, ' has been updated');
    
    SELECT ConfirmationMessage as Confirmation;

END; 
//
DELIMITER ;

CALL UpdateBooking (37, '2023-09-14 10:45:00');

每次我运行这些代码时,它都会返回相同的结果。没有错误,它只是将 bookingslot 列中的所有日期时间值更改为我为一个 bookingID 回调的值。我正在使用 MySQL Workbench 来运行这些代码。据我所知,数据库没有任何问题,并且我已经在该数据库中编写了其他运行良好的存储过程。这是我遇到的第一个问题。

我感谢任何帮助。

sql mysql stored-procedures mysql-workbench
2个回答
0
投票

试试这个:

DELIMITER //

CREATE PROCEDURE UpdateBooking (
    IN BookingID INT, 
    IN NewSlotTime DATETIME
)
BEGIN 
    DECLARE ConfirmationMessage VARCHAR(255);
    
    UPDATE bookings
    SET BookingSlot = NewSlotTime
    WHERE BookingID = BookingID;  
    
    SET ConfirmationMessage = CONCAT('Booking ID ', BookingID, ' has been updated');
    
    SELECT ConfirmationMessage as Confirmation;

END; 
//
DELIMITER ;

0
投票

WHERE BookingID = BookingID
- 这始终是正确的,因此所有行而不是单个行都被更新。

解析器无法确定第一个 BookingID 指定了列名,而第二个 BookingID 是传递的参数。

只需使用另一个参数名称,例如Booking_ID。

© www.soinside.com 2019 - 2024. All rights reserved.