【发布时间】:2021-05-18 18:32:24
【问题描述】:
我正在将我的数据库从 SQL Server 转换为 MySQL。我遇到了有关触发器的问题。
这是我的 SQL Server 代码
--IF A SALE IS DELETE WHICH WHICH INCLUDED AN ITEM FROM ORDER THEN ORDER SHOULD BE PENDING AS IT IS NOT DELIEVERED
GO
CREATE TRIGGER UPDATE_ORDER_ON_SALE_DELETE
ON STOCKS
FOR UPDATE
AS
IF EXISTS (SELECT BARCODE FROM ORDER_ITEMS WHERE BARCODE= ALL(SELECT BARCODE FROM inserted))
BEGIN
UPDATE ORDERS
SET ORDER_STATUS = 'PENDING'
WHERE ORDER_ID =ALL (SELECT ORDER_ID
FROM ORDER_ITEMS
WHERE BARCODE = ALL(SELECT BARCODE
FROM inserted));
END
我已将其转换为 MySQL,如下所示
CREATE TRIGGER `UPDATE_ORDER_ON_SALE_DELETE` AFTER UPDATE ON `stocks` FOR EACH ROW
IF EXISTS (SELECT BARCODE FROM ORDER_ITEMS WHERE BARCODE = NEW.BARCODE)
BEGIN
UPDATE ORDERS
SET ORDER_STATUS = 'PENDING'
WHERE ORDER_ID =ALL (SELECT ORDER_ID
FROM ORDER_ITEMS
WHERE BARCODE = NEW.BARCODE);
END
我收到此错误
#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解要使用的正确语法 在“开始”附近 更新订单 SET ORDER_STATUS = '待定' 第 4 行的 WHERE ORDER_ID'
我尝试了不同的代码变体,但我认为我在 IF EXISTS 语句中遇到了错误
我也试过
CREATE TRIGGER `UPDATE_ORDER_ON_SALE_DELETE` AFTER UPDATE ON `stocks` FOR EACH ROW
IF EXISTS (SELECT BARCODE FROM ORDER_ITEMS WHERE BARCODE = (SELECT BARCODE FROM NEW.BARCODE))
BEGIN
UPDATE ORDERS
SET ORDER_STATUS = 'PENDING'
WHERE ORDER_ID =ALL (SELECT ORDER_ID
FROM ORDER_ITEMS
WHERE BARCODE = (SELECT BARCODE FROM NEW.BARCODE));
END
【问题讨论】:
-
所有代码都必须在 BEGIN-END 块内,而不是在它之外。