none
triger sorunu RRS feed

  • Genel Tartışma

  • merhaba bir triggerim var yaptığı işlem şu

    PROPERT tablosunda bir değişiklik olduğunda bu propert tablosunu kullanan diğer tüm tabloların kolonların

    güncelleme yapar

    örneğin

    property tablosudur

    GUID          GUID_PROPERTY              PROPERTY_NAME

    12312      3E23412312312               ANKARA

    PASSENGER_SERVICE_CORPORATE TABLOSU

    GUID      GUID_PARENT              DEPARTURE_PROVINCE

    45345   34634534534               ANKARA

    x tablolara guid olarak değil TEXT olarak yazılmakta

    sorunum ise propert tablosundaki ankarayı ANKARAM yaptığımda ,property tablosu güncelleniyor ancak

    x tablolar güncellenmiyor

    not: switch olmasının nedeni property tablosu genel olarak kullanılıyor ,bu tabloda il,ilçe,marka,model gibi nesneler var

    ve x tabloların her kolonuda bu property tablosunu kullandığı için parent da göre işlem yapmakta

     
     
    create trigger PropertyUpdate on PROPERTY after update 
    as
    begin
    declare 
    @OldPropertyName nvarchar,
    @PropertyName nvarchar,
    @Guid uniqueidentifier,
    @Guid_Parent uniqueidentifier
    select @Guid_Parent=GUID_PARENT, @OldPropertyName=PROPERTY_NAME from deleted
    select @Guid_Parent=GUID_PARENT, @OldPropertyName=PROPERTY_NAME from inserted
    begin
    
    if @Guid_Parent = 'EB550558-C7FA-4C1B-BE94-80894DD05E56' -- province
      Begin
      update LOOKING_FOR_DRIVER set PROVINCE=@PropertyName where PROVINCE=@OldPropertyName
    update LOOKING_FOR_WORK set PROVINCE=@PropertyName where PROVINCE=@OldPropertyName
    update PASSENGER_SERVICE_CORPORATE set DEPARTURE_PROVINCE=@PropertyName where DEPARTURE_PROVINCE=@OldPropertyName
    update PASSENGER_SERVICE_CORPORATE set DESTINATION_PROVINCE=@PropertyName where DESTINATION_PROVINCE=@OldPropertyName
    update PASSENGER_SERVICE_PERSONEL set SERVICE_PROVINCE=@PropertyName where SERVICE_PROVINCE=@OldPropertyName
    update TRANSPORT_CARGO_SERVICE set SERVICE_PROVINCE=@PropertyName where SERVICE_PROVINCE=@OldPropertyName
    update TRANSPORT_CARGO_SERVICE set DEPARTURE_PROVINCE=@PropertyName where DEPARTURE_PROVINCE=@OldPropertyName
    update TRANSPORT_CARGO_SERVICE set DESTINATION_PROVINCE=@PropertyName where DESTINATION_PROVINCE=@OldPropertyName
      end
     else if @Guid_Parent ='3FD39E7E-DE96-46A3-9BF9-C584EA673193' -- mark
      Begin
       update PASSENGER_SERVICE_CORPORATE set CAR_MARK=@PropertyName where CAR_MARK=@OldPropertyName
      update PASSENGER_SERVICE_PERSONEL set CAR_MARK=@PropertyName where CAR_MARK=@OldPropertyName
      end
      
     else if @Guid_Parent = '7ECF2A75-A65F-4D90-A110-D679C485D8AE' -- year
      Begin
      update PASSENGER_SERVICE_CORPORATE set CAR_MODEL_YEAR=@PropertyName where CAR_MODEL_YEAR=@OldPropertyName
    update PASSENGER_SERVICE_PERSONEL set CAR_MODEL_YEAR=@PropertyName  where CAR_MODEL_YEAR=@OldPropertyName
    
      end
      
     else if @Guid_Parent = '84B17956-8458-4709-857D-3A6F5054FA2D' -- cartype
      Begin
      update TRANSPORT_CARGO_SERVICE set CAR_TYPE=@PropertyName  where CAR_TYPE=@OldPropertyName
      end
      end  
      end
    
    
    
     
     
    
     

    11 Şubat 2013 Pazartesi 16:41

Tüm Yanıtlar

  • Kodlara baktım ama kafam çok karışık tam yoğunlaşamadım ama bir yerde bir eksik var sanki
    18 Mayıs 2013 Cumartesi 13:30
  • Merhaba,

    Aynı değişkenlere önce deleted sonra inserted tablosundan okunan veriyi atamışsınız. Sanırım bunlardan birinde @PropertyName değişkeni değerini almalıydı.

    select @Guid_Parent=GUID_PARENT, @OldPropertyName=PROPERTY_NAME from deleted
    select @Guid_Parent=GUID_PARENT, @OldPropertyName=PROPERTY_NAME from inserted

    Siz bu iki Select cümlesinden ikincisinde @PropertyName değişkeninin değer almasını sağlayıp dener misiniz?


    • Düzenleyen Usanmaz 18 Mayıs 2013 Cumartesi 18:03 Cümleyi düzelttim
    18 Mayıs 2013 Cumartesi 17:48
  • TRIGGER içerisindeki ilk satırlarda eski değeri almıyorsunuz. @PropertyName  değişkeni herhangi bir yerde set edilmemiş. 2.satır olduğu gibi kopyalanmış görünüyor. Aşağıdaki DELETED ve INSERTED tablosunda okuduğunuz satırları aşağıdaki gibi değiştirirseniz çalışacaktır.

    select @Guid_Parent=GUID_PARENT, @OldPropertyName=PROPERTY_NAME from deleted
    select @Guid_Parent=GUID_PARENT, @PropertyName=PROPERTY_NAME from inserted


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    20 Mayıs 2013 Pazartesi 06:52