2015-06-25 4 views
-1

Я совершенно не знаком с SQL Server 2008, и я написал триггер и хотел бы быть выполненным только из hassubproduct и spdisplaytype столбцы обновлены или вставлены, и если они имеют значение и не являются пустыми.Как запустить SQL-триггер

Любая помощь приветствуется.

CREATE TRIGGER [dbo].[hassubproductcheck] 
ON [dbo].[products] 
WITH EXECUTE AS CALLER 
FOR INSERT, UPDATE 
AS 
BEGIN 
    UPDATE products 
    SET hassubproduct = LTRIM(RTRIM(hassubproduct)) 

    UPDATE products 
    SET spdisplaytype = LTRIM(RTRIM(spdisplaytype)) 
END 
GO 
+1

Ваш триггер обновляет всю таблицу для каждой вставки и обновления. Вы также выполняете два оператора обновления, когда 1 будет достаточно. –

ответ

1

Что-то вроде этих линий скорее всего похоже на то, что вы хотите.

CREATE TRIGGER [dbo].[hassubproductcheck] ON [dbo].[products] 
WITH EXECUTE AS CALLER FOR INSERT, UPDATE 
AS BEGIN 
    Update p 
     set hassubproduct = LTRIM(RTRIM(i.hassubproduct)) 
     , spdisplaytype = LTRIM(RTRIM(i.spdisplaytype)) 
    from Products p 
    join inserted i on i.PrimaryKey = p.PrimaryKey 
    where i.hassubproduct > '' 
     OR i.spdisplaytype > '' 

END 
+0

Привет, Шон, спасибо за отзыв. Я попытался, но я получаю ошибки: Неоднозначное название столбца «hassubproduct». Неоднозначное название столбца 'spdisplaytype'. – Vaheh

+0

Ahh да ... не мог проверить это, конечно. Вам просто нужно добавить вставленный псевдоним в функции обрезки. Я буду обновляться мгновенно. –

+0

Как наилучшая практика, я бы вложил это заявление в(). Затем, когда кто-то позже добавляет к нему anotehr и clause, они не получат неожиданных результатов из-за порядка операций. – HLGEM

0

Для определения триггера необходимо использовать приведенный ниже код. Это поможет обновить. Точно так же мы должны создать один для вставленного.

CREATE TRIGGER [dbo].[hassubproductcheck] ON [dbo].products]    
    AFTER UPDATE 
     AS 
     INSERT INTO DBO.SAMPLE_TRIGGER 
     SELECT hassubproduct, 'UPDATE(PREVIOUS)' [TABLE-UPDATE] FROM DELETED 
     GO 

     CREATE TRIGGER [dbo].[hassubproductcheck] ON [dbo].products]    
     AFTER UPDATE 
     AS 
     INSERT INTO DBO.SAMPLE_TRIGGER 
     SELECT hassubproduct, 'UPDATE (LATEST)' [TABLE-UPDATE] FROM DELETED 
     GO 
+0

Я не понимаю, что вы здесь делаете. У вас есть два триггера с одинаковым именем, а операторы select - одно и то же, кроме измененной константы строки. –

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