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

Posted

技术标签:

【中文标题】在插入表之前检查数据是不是存在【英文标题】:Check data existance before inserting to table在插入表之前检查数据是否存在 【发布时间】:2013-09-30 11:01:32 【问题描述】:

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

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】:

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

无论如何,我假设您要检查是否存在以避免在 Queue table 中多次输入相同的 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 )

【讨论】:

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

以上是关于在插入表之前检查数据是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何在插入 MySQL 之前检查表中是不是存在名称 [重复]

如何在将大量数据插入数据库之前检查记录是不是存在?

在插入之前检查 DataGridview 中的值是不是与数据库表/模式兼容

Cakephp:在保存之前检查数据是不是存在

实体框架:在插入新记录之前检查记录是不是存在

laravel 在插入之前检查记录是不是存在,这是一种有效的方法