[英]Convert Oracle SQL trigger into a SQL Server trigger
我尝试将用 Oracle 编写的触发器转换为 SQL 服务器触发器。 但它不允许在查询中使用表别名和“:OLD”关键字。 知道如何进行正确的转换吗?
Oracle 触发器:
CREATE OR REPLACE TRIGGER TRG_DEL_AM_LABELS BEFORE DELETE on AM_LABELS
FOR EACH ROW
BEGIN
DELETE FROM AM_LABEL_URLS ALU WHERE ALU.LABEL_ID = :OLD.LABEL_ID;
END;
转换后的 SQL 服务器触发器:
CREATE OR ALTER TRIGGER TRG_DEL_AM_LABELS
ON AM_LABELS
INSTEAD OF DELETE
AS
BEGIN
DELETE FROM AM_LABEL_URLS ALU
WHERE ALU.LABEL_ID = :OLD.LABEL_ID;
END
CLOSE DELETED_CUR;
DEALLOCATE DELETED_CUR;
DELETE FROM AM_LABELS WHERE (.LABEL_ID;) IN (SELECT .LABEL_ID; FROM DELETED);
;
这些是弹出的错误。
':' 附近的语法不正确。
“ALU”附近的语法不正确。
但正如文档中提供的那样,此查询可在 SQL 服务器中使用。
使用 DELETED 表访问旧值:
DML 触发器语句使用两个特殊表:已删除表和已插入表。 SQL 服务器自动创建和管理这些表。 您可以使用这些临时的、驻留在内存中的表来测试某些数据修改的效果并为 DML 触发操作设置条件。
删除的表在 DELETE 和 UPDATE 语句期间存储受影响行的副本。 在执行 DELETE 或 UPDATE 语句期间,行会从触发器表中删除并转移到已删除的表中。 删除的表和触发器表通常没有共同的行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.