删除触发器中的多个 IF 语句

Multiple IF statements in Delete Trigger

我正在尝试在 SQL 服务器触发器中创建以下逻辑:

  1. 检查是否 Deleted.ProfID = 3
  2. 如果是,检查tblPartLic中是否没有ProfID = 3的记录,则
  3. 如果不是,则在 tblParticipantLicense 中插入一条未许可的 3 记录
    - 一个。 idsNumber, txtEmailAddress, state = 70 状态

我试过了:

IF (deleted.idsProf = 3)
BEGIN

    IF NOT Exists(Select PL.idsNumber FROM tblPartLic PL INNER JOIN Deleted D 
        ON PL.idsNumber=D.idsNumber 
        WHERE PL.idsProfession = 3 AND PL.idsState <> 70)
    BEGIN

        INSERT INTO tblPartLic (idsNumber, txtLicNumber, txtState, txtProfOrg, 
                idsCountry, idsState, idsProf)
            SELECT Deleted.idsDASNumber, 'AR NL', 'NL', 'Architect', 208, 70, 3
            FROM Deleted 

    END;
END;            

Deleted 是一个 table(伪 table),因此可能有多行 - 其中一些可能有 ProfID = 3,其中一些可能有ProfId <> 3。这必须处理。此外,关系数据库是为基于集合的操作而不是过程操作而设计的。可以使用适当的 where 子句将您的逻辑构建到单个插入语句中。以下内容再现了上面显示的内容:

INSERT INTO tblPartLic (idsNumber, txtLicNumber, txtState, txtProfOrg, idsCountry, idsState, idsProf)
    SELECT D.idsDASNumber, 'AR NL', 'NL', 'Architect', 208, 70, 3
    FROM Deleted D
    -- Condition 1 - ProfID = 3
    WHERE D.ProfID = 3
    -- Condition 2 - No existing record in tblPartLic
    AND NOT EXISTS (
        SELECT PL.idsNumber
        FROM tblPartLic PL
        WHERE PL.idsProfession = 3 AND PL.idsState <> 70
        AND PL.idsNumber = D.idsNumber
    );