在插入表之前检查数据是否存在

时间:2013-09-30 11:01:33

标签: sql-server database triggers exists

我有一个触发器,它根据下面的条件从另一个表中将数据插入到表中:

DECLARE @pID VARCHAR(50);

SELECT @pID = I.pID FROM inserted I;

INSERT  INTO Queue ( ID )
        SELECT  ID
        FROM    Inventory
        WHERE   pID = @pID

如何在插入之前检查ID是否存在?

注意:将从 -

返回多个记录
SELECT  ID
            FROM    Inventory
            WHERE   pID = @pID

1 个答案:

答案 0 :(得分:1)

正如您已经提到的,[inserted]可以包含零个,一个或多个记录。将该信息存储到变量中的方法不起作用。

无论如何,我假设您要检查是否存在以避免多次在Queue表中输入相同的ID?

在这种情况下,您可以在触发器中使用以下代码:

INSERT  INTO Queue ( ID )
        SELECT  DISTINCT I.ID -- as to avoid same ID being inserted multiple times
        FROM    Inventory I
        JOIN    inserted
          ON    inserted.pID = I.pID
        WHERE   NOT EXISTS ( SELECT *
                               FROM Queue Q
                              WHERE Q.ID = I.ID )