BRKZKN
BRKZKN

Reputation: 41

Incorrect syntax near the keyword 'TRIGGER'

CREATE TRIGGER AirportCodeDegis
    ON AIRPORT
    INSTEAD OF UPDATE
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @Silinen_AirportCode nvarchar(10) = (SELECT deleted.Airport_code FROM deleted);
    DECLARE @Yeni_AirportCode nvarchar(10) = (SELECT inserted.Airport_code FROM inserted);

    -- Airport Tablosunda güncellenen Airport_code değerini, CAN_LAND tablosunun içindeki airport_code değerine atamaktadır..
    IF (SELECT COUNT(*) FROM CAN_LAND WHERE CAN_LAND.Airport_code = @Silinen_AirportCode) != 0
        BEGIN 
            UPDATE CAN_LAND SET Airport_code = @Yeni_AirportCode WHERE Airport_code = @Silinen_AirportCode; 
        END

    -- Airport Tablosunda güncellenen airport_code değerini, FLIGHT_LEG tablosunun içindeki Arrival_airport_code değerine atamaktadır..
    IF (SELECT COUNT(*) FROM FLIGHT_LEG WHERE FLIGHT_LEG.Arrival_airport_code = @Silinen_AirportCode) != 0
        BEGIN 
            UPDATE FLIGHT_LEG SET Arrival_airport_code = @Yeni_AirportCode WHERE Arrival_airport_code = @Silinen_AirportCode; 
        END

    -- Airport Tablosunda güncellenen airport_code değerini, FLIGHT_LEG tablosunun içindeki Departure_airport_code değerine atamaktadır..
    IF (SELECT COUNT(*) FROM FLIGHT_LEG WHERE Departure_airport_code = @Silinen_AirportCode) != 0
        BEGIN
            UPDATE FLIGHT_LEG SET Departure_airport_code = @Yeni_AirportCode WHERE Departure_airport_code = @Silinen_AirportCode; 
        END

    -- Airport Tablosunda güncellenen airport_code değerini, LEG_INSTANCE tablosunun içindeki Arrival_airport_code değerine atamaktadır..
    IF (SELECT COUNT(*) FROM LEG_INSTANCE WHERE LEG_INSTANCE.Arrival_airport_code = @Silinen_AirportCode) != 0
        BEGIN 
            UPDATE LEG_INSTANCE SET Arrival_airport_code = @Yeni_AirportCode WHERE Arrival_airport_code = @Silinen_AirportCode; 
        END

    -- Airport Tablosunda güncellenen airport_code değerini, LEG_INSTANCE tablosunun içindeki Departure_airport_code değerine atamaktadır..
    IF (SELECT COUNT(*) FROM LEG_INSTANCE WHERE LEG_INSTANCE.Departure_airport_code = @Silinen_AirportCode) != 0
        BEGIN 
            UPDATE LEG_INSTANCE SET Departure_airport_code = @Yeni_AirportCode WHERE Departure_airport_code = @Silinen_AirportCode; 
        END

    SET NOCOUNT OFF;
END;

I get this error:

Msg 156, Level 15, State 1, Procedure SegmentasyonSagla, Line 107 [Batch Start Line 3]
Incorrect syntax near the keyword 'TRIGGER'.

Can you help me about this error thank you :)

Upvotes: 2

Views: 666

Answers (1)

Emre Kabaoglu
Emre Kabaoglu

Reputation: 13146

I guess, you are trying to create trigger in a procedure which named SegmentasyonSagla. You should use dynamic query to create trigger.

CREATE PROC AirportCodeDegisProc
as
begin
    declare @query nvarchar(max) = '
    CREATE TRIGGER AirportCodeDegis
        ON ActiveEvaluations
        INSTEAD OF UPDATE
    AS
    BEGIN
        SET NOCOUNT ON;
        DECLARE @Silinen_AirportCode nvarchar(10) = (SELECT deleted.Airport_code FROM deleted);
        DECLARE @Yeni_AirportCode nvarchar(10) = (SELECT inserted.Airport_code FROM inserted);

        -- Airport Tablosunda güncellenen Airport_code değerini, CAN_LAND tablosunun içindeki airport_code değerine atamaktadır..
        IF (SELECT COUNT(*) FROM CAN_LAND WHERE CAN_LAND.Airport_code = @Silinen_AirportCode) != 0
            BEGIN 
                UPDATE CAN_LAND SET Airport_code = @Yeni_AirportCode WHERE Airport_code = @Silinen_AirportCode; 
            END

        -- Airport Tablosunda güncellenen airport_code değerini, FLIGHT_LEG tablosunun içindeki Arrival_airport_code değerine atamaktadır..
        IF (SELECT COUNT(*) FROM FLIGHT_LEG WHERE FLIGHT_LEG.Arrival_airport_code = @Silinen_AirportCode) != 0
            BEGIN 
                UPDATE FLIGHT_LEG SET Arrival_airport_code = @Yeni_AirportCode WHERE Arrival_airport_code = @Silinen_AirportCode; 
            END

        -- Airport Tablosunda güncellenen airport_code değerini, FLIGHT_LEG tablosunun içindeki Departure_airport_code değerine atamaktadır..
        IF (SELECT COUNT(*) FROM FLIGHT_LEG WHERE Departure_airport_code = @Silinen_AirportCode) != 0
            BEGIN
                UPDATE FLIGHT_LEG SET Departure_airport_code = @Yeni_AirportCode WHERE Departure_airport_code = @Silinen_AirportCode; 
            END

        -- Airport Tablosunda güncellenen airport_code değerini, LEG_INSTANCE tablosunun içindeki Arrival_airport_code değerine atamaktadır..
        IF (SELECT COUNT(*) FROM LEG_INSTANCE WHERE LEG_INSTANCE.Arrival_airport_code = @Silinen_AirportCode) != 0
            BEGIN 
                UPDATE LEG_INSTANCE SET Arrival_airport_code = @Yeni_AirportCode WHERE Arrival_airport_code = @Silinen_AirportCode; 
            END

        -- Airport Tablosunda güncellenen airport_code değerini, LEG_INSTANCE tablosunun içindeki Departure_airport_code değerine atamaktadır..
        IF (SELECT COUNT(*) FROM LEG_INSTANCE WHERE LEG_INSTANCE.Departure_airport_code = @Silinen_AirportCode) != 0
            BEGIN 
                UPDATE LEG_INSTANCE SET Departure_airport_code = @Yeni_AirportCode WHERE Departure_airport_code = @Silinen_AirportCode; 
            END

        SET NOCOUNT OFF;
    END;'
    EXECUTE sp_executesql @query
end

Upvotes: 1

Related Questions