Как активировать триггер на всех записях? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть триггер UPDATE / INSERT для таблицы, которая использует поиск для установки значения.Поиск теперь изменился, и я хотел запустить триггер для каждой записи.

Существует ли простой способ активировать триггер для каждой записи в таблице?Я пробовал простое обновление, такое как

update INDIVIDUAL_LOC
set EDIT_LINK=1

, однако это не активирует триггер.

Код триггера:

DECLARE
    @sCountry   Varchar(254),
    @sLeftPostcode  Varchar(10),
    @sPartPostcode  Varchar(10),
    @nIndRef    Integer,
    @sAttrCode  Varchar(254),
    @nAttrCodeRef   Integer

BEGIN
IF EXISTS (SELECT 1 FROM app_profile WHERE section = 'TRIGGERS' AND entry = 'RGS Region Attribute Trigger 2' AND value = 'Y' )
    BEGIN
    --add check for validity of address
    IF EXISTS (SELECT 1 FROM inserted WHERE inserted.main_location = 'Y' AND inserted.valid_from <= getdate() AND (inserted.valid_to > getdate() OR inserted.valid_to IS NULL))
        BEGIN
        SELECT @sCountry = location.country, @sLeftPostcode = LEFT(location.postcode,2), @sPartPostcode = SUBSTRING(location.postcode, 0, CHARINDEX(' ', location.postcode)), @nIndRef = inserted.individual_ref
        FROM inserted, location
        WHERE inserted.location_ref = location.location_ref

        IF @sCountry = 'Singapore'
            SET @sAttrCode = 'SING'
        ELSE IF @sCountry = 'Hong Kong'
            SET @sAttrCode = 'HK'
        ELSE IF @sCountry = 'Republic of Ireland'
            SET @sAttrCode = 'IRL'
        ELSE IF @sCountry = 'UK'
            BEGIN
            SELECT @sAttrCode = lookup_short_desc
            FROM lookup, lookup_type
            WHERE lookup_type.lookup_type_ref = lookup.lookup_type_ref
            AND lookup_type.lookup_type_code = 'PCODE2'
            AND lookup.lookup_code = @sLeftPostcode
            AND lookup.valid_from <= getdate() AND (lookup.valid_to >= getdate() OR lookup.valid_to IS NULL)

            IF @sAttrCode IS NULL
                SELECT @sAttrCode = lookup_short_desc
                FROM lookup, lookup_type
                WHERE lookup_type.lookup_type_ref = lookup.lookup_type_ref
                AND lookup_type.lookup_type_code = 'PCODE2'
                AND lookup.lookup_code = @sPartPostcode
                AND lookup.valid_from <= getdate() AND (lookup.valid_to >= getdate() OR lookup.valid_to IS NULL)
            END

        IF @sAttrCode IS NOT NULL
            SELECT @nAttrCodeRef = lookup_ref
            FROM lookup
            WHERE lookup_type_ref = 339
            AND lookup_code = @sAttrCode
            AND lookup.valid_from <= getdate() AND (lookup.valid_to >= getdate() OR lookup.valid_to IS NULL)
        ELSE
            SELECT @nAttrCodeRef = lookup_ref
            FROM lookup
            WHERE lookup_type_ref = 339
            AND lookup_code = 'NOREG'
            AND lookup.valid_from <= getdate() AND (lookup.valid_to >= getdate() OR lookup.valid_to IS NULL)

        IF @nAttrCodeRef IS NOT NULL
            BEGIN
            --Check whether this exact attribute already exists or not
            IF NOT EXISTS (SELECT 1 FROM attribute WHERE individual_ref = @nIndRef AND attr_code_ref = @nAttrCodeRef)
                BEGIN
                --Check whether the attribute already exists or not
                IF EXISTS (SELECT 1 FROM attribute WHERE individual_ref = @nIndRef AND code_type = 339)
                    UPDATE attribute SET attribute_code = @sAttrCode, attr_code_ref = @nAttrCodeRef, valid_to = null WHERE individual_ref = @nIndRef AND code_type = 339
                ELSE
                    INSERT INTO attribute ( individual_ref, code_type, attribute_code, attr_code_ref, valid_from )
                    VALUES ( @nIndRef, 339, @sAttrCode, @nAttrCodeRef, getdate() )
                END
            END

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