繁体   English   中英

将 Oracle SQL 触发器转换为 SQL 服务器触发器

[英]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 语句期间,行会从触发器表中删除并转移到已删除的表中。 删除的表和触发器表通常没有共同的行。

请参阅https://docs.microsoft.com/en-us/sql/relational-databases/triggers/use-the-inserted-and-deleted-tables?view=sql-server-ver15

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM