[英]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.