2013-09-30 2 views
1

У меня есть триггер, который вставляет данные в таблицу из другой таблицы на основе состояния, как показано ниже:Проверить данные Существование перед вставкой в ​​таблицу

DECLARE @pID VARCHAR(50); 

SELECT @pID = I.pID FROM inserted I; 

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

Как я могу проверить, если идентификатор существует перед установкой?

Примечание: Там будет несколько записей вернулся из -

SELECT ID 
      FROM Inventory 
      WHERE pID = @pID 

ответ

1

Как вы уже упомянуть, [вставить] может содержать ноль, один или несколько записей. Подход к хранению этой информации в переменной НЕ будет работать.

В любом случае, я предполагаю, что вы хотите проверить существование, чтобы избежать того же идентификатора, который не вводится в таблицу очередей несколько раз?

В этом случае вы можете использовать следующий код в триггер:

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) 
+0

Во всяком случае, я предполагаю, что вы хотите, чтобы проверить существование, чтобы избежать такой же идентификатор не введен в несколько раз Queue таблицы ? - Это верно.. – James

Смежные вопросы