首页 > 解决方案 > 如何将 DB2 触发器转换为 SQL Server?

问题描述

我正在将一些 DB2 触发器转换为 SQL Server。这里展示的其中一个我正在努力解决,Conversion 在一定程度上尝试过,但似乎还不够好,无法解决。

在更新或插入之前触发执行,并在写入数据库之前根据带 where 子句的括号中的语句PDE_KEY选择列的值。Select

需要帮忙。

DB2 触发器

CREATE OR REPLACE TRIGGER "TDC" BEFORE
INSERT
    ON
    "DECL_CONSIGNMENT" REFERENCING NEW AS NEW FOR EACH ROW NOT SECURED SET
    NEW.PDE_KEY = (
    SELECT
        D.PDE_KEY
    FROM
        DECL D
    WHERE
        D.DE_KEY = NEW.DE_KEY)

此触发器的 SQL Server 转换(我的尝试):

CREATE TRIGGER [TDC]
ON [DECL_CONSIGNMENT]
INSTEAD OF INSERT
AS 
BEGIN
    DECLARE @PDE_KEY BIGINT
    SET NOCOUNT ON

    SELECT
        @PDE_KEY = D.PDE_KEY
    FROM
        DECL D
    WHERE
        D.DE_KEY = (...work upto here)
END

标签: sqlsql-serverdb2

解决方案


instead of触发器必须显式执行所需的 dml 。

REATE TRIGGER [TDC]
ON [DECL_CONSIGNMENT]
INSTEAD OF INSERT
AS 
BEGIN       
    SET NOCOUNT ON;
    INSERT INTO [DECL_CONSIGNMENT] (a, b, .. PDE_KEY, ..)
    SELECT a, b, .. (
       SELECT
         D.PDE_KEY
       FROM
         DECL D
       WHERE
         D.DE_KEY = i.DE_KEY),
       ..
    FROM inserted i;
END

推荐阅读