簡體   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