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

问题描述 投票:0回答:1

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

  1. 检查是否Deleted.ProfID = 3
  2. 如果是,请检查tblPartLic中是否没有ProfID = 3的记录,然后
  3. [否则,将未授权的3条记录插入tblParticipantLicense - 一种。 idsNumber,txtEmailAddress,状态= 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;            
sql sql-server database-trigger nested-if
1个回答
2
投票

Deleted是一个表(伪表),因此可以具有多个行-其中一些可能具有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
    );
© www.soinside.com 2019 - 2024. All rights reserved.