Поместите два запроса для запуска оператора - PullRequest
0 голосов
/ 09 апреля 2019

Я помещаю следующие запросы в триггер (он был создан нормально), и они будут запускаться / выполняться в следующем порядке: сначала вставить, а затем обновить?

GO

CREATE TRIGGER [FieldID]
ON [Field].[AttributeValues]
AFTER INSERT  
AS  
    INSERT INTO [Field].[Field_ElementID] (Path) 
        SELECT DISTINCT Path     
        FROM [Field].[AttributeValues] 
        WHERE Path NOT IN (SELECT Path FROM [Field].[Field_ElementID])

    UPDATE [Field].[AttributeValues] 
    SET PathID = (SELECT Id FROM [Field].[Field_ElementID] 
                  WHERE [Field].[AttributeValues].[Path] = [Field].[Field_ElementID].[Path]) 
    WHERE PathID IS NULL
GO 

Спасибо, S

1 Ответ

0 голосов
/ 09 апреля 2019

Лично (если я правильно понимаю ваш SQL) я бы сделал это, но ваш второй запрос кажется странным, поскольку он вообще не ссылается на inserted.

CREATE TRIGGER [FieldID]
ON [Field].[AttributeValues]
AFTER INSERT
AS
BEGIN

    INSERT INTO FE ([Path])
    SELECT DISTINCT i.[Path]
    FROM inserted i
         LEFT JOIN [Field].[Field_ElementID] FE ON I.[Path] = FE.[Path]
    WHERE FE.ID IS NULL; --Needs correcting, if incorrect

    UPDATE AV
    SET PathID = FE.ID
    FROM [Field].[AttributeValues] --Seems really odd this doesn't reference inserted at all
         JOIN [Field].[Field_ElementID] FE ON AV.[Path] = FE.[Path]
    WHERE AV.PathID IS NULL;

END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...