2013-04-11 4 views
0

Я работал над этим триггером и не мог понять это. Я получил некоторую помощь от людей здесь и сделал большой прогресс, но еще не смог закончить.SQL-соединение триггера не работает

вот мой триггер с соединением. вставка не происходит .... Я не могу отлаживать и не вижу ошибки, если она есть. Я использую SQL веб-инструмент, к сожалению,

CREATE trigger Posts_Raw_To_Queue_Trigger ON SendNotificationPostsRaw 
FOR INSERT 
AS 
BEGIN 
    INSERT INTO SendNotificationPostsQueue (UserID,PostID,SpecialityID) 
    SELECT I.PostID, I.UserID, P.CategoryId 
    FROM INSERTED AS I JOIN PostCategoryRelations AS P ON I.PostID= P.PostId 
END 
+2

ли в PostCategoryRelations записи вы присоединитесь к записывается в той же транзакции, или это уже есть? –

+3

У вас есть другой порядок в 'INSERT' и' SELECT': 'INSERT ... (UserId, PostId, ...) SELECT I.PostID, I.UserID'. Это опечатка? Если нет, он может выйти из строя из-за нарушения ссылочной целостности. – a1ex07

+0

Вы правы, но это не исправляет его, хотя –

ответ

0

Попробуйте один -

CREATE TRIGGER dbo.Posts_Raw_To_Queue_Trigger 

    ON dbo.SendNotificationPostsRaw 

    -- please write this if SendNotificationPostsRaw is table 
    AFTER INSERT 
    -- or write this if SendNotificationPostsRaw is view 
    INSTEAD OF INSERT 

    --FOR INSERT 

AS BEGIN 

    -- check if thete are any rows 
    IF NOT EXISTS(
     SELECT 1 
     FROM INSERTED i 
    ) RAISERROR('Nothing to insert', 16, 1) 


    INSERT INTO dbo.SendNotificationPostsQueue 
    (
      UserID 
     , PostID 
     , SpecialityID 
    ) 
    SELECT 
      I.PostID 
     , I.UserID 
     , P.CategoryID 
    FROM INSERTED AS I 
    JOIN PostCategoryRelations P ON I.PostID = P.PostId 

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