Soran
triger sorunu

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
- Değiştirilmiş Tür Ali Rıza İnceoğlu 15 Şubat 2013 Cuma 15:39
Tüm Yanıtlar
-
-
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
-
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ı