trigger yazarken tek satir gelecekmis gibi kod yazman disinda bir problem yok. ama bahsettigim problem de hic de yamana atilacak bir problem degil haberin olsun. https://stackoverflow.com/a/408381 şuanki haliyle birden fazla satır geldiğinde de çalışıyor diye biliyorum ama yanılıyor muyum? çoklu satır derken tam olarak neyi kastettin hocam.

Hocam her güncelleme de eski kaydı silip yeni kayıt oluştursan ve bylelikle upda ile uğraşmasan olmaz mı?

guru bunu yazdı trigger yazarken tek satir gelecekmis gibi kod yazman disinda bir problem yok. ama bahsettigim problem de hic de yamana atilacak bir problem degil haberin olsun. https://stackoverflow.com/a/408381 şuanki haliyle birden fazla satır geldiğinde de çalışıyor diye biliyorum ama yanılıyor muyum? çoklu satır derken tam olarak neyi kastettin hocam. ornek olarak update set = + 5 where in (1,2,3,4) seklindeki bir sorgu sonucu, senin trigger 1 kere calistirilir ancak inserted ve deleted tablolarinda 4 satir vardir. ancak senin trigger Select @UrunId = from inserted su sekilde kodlar icerdigi icin, yanlizca son satir icin trigger gorevini yerine getirir. Cunku @UrunId 4 olur. halbuki birden fazla deger var inserted ve deleted icinde onun yerine ornegin Update dbo. MontajUrun set UrunMevcudu=UrunMevcudu- @StokAdet where MontajUrunID=@UrunId bu sorgu yerine Update dbo. MontajUrun set UrunMevcudu=UrunMevcudu- @StokAdet where MontajUrunID in bu sekilde yapman lazim. ..

Hocam senin icin iki adet sql fiddle hazirladim birincisindeki trigger sende isaret etmeye calistigim hatalarin oldugu sekilde CREATE TABLE ( INT IDENTITY(0,1), INT); CREATE TRIGGER ON AFTER UPDATE AS BEGIN DECLARE @dID INT DECLARE @dValue INT SELECT @dID = FROM INSERTED SELECT @dValue = FROM INSERTED UPDATE SET = @dValue + 5 WHERE = @dID END; INSERT INTO VALUES (5), (10), (15); ikincisindeki trigger ise duzeltilmis hali CREATE TABLE ( INT IDENTITY(0,1), INT); CREATE TRIGGER ON AFTER UPDATE AS BEGIN UPDATE SET = . + 5 FROM INNER JOIN INSERTED ON . = . END; INSERT INTO VALUES (5), (10), (15); ikisinde de ayni asagidaki kodu calistiriyorum SELECT FROM ; UPDATE SET = 100 WHERE IN (0, 1, 2); SELECT FROM ; normal sartlarda, trigger amacina uygun calisinca, butun satirlarin yeni attigim degerden 5 fazlasi olmasi beklenir. yani hepsi 105 olmali ancak 1. sekilde asagidaki sonucu aliyoruz. 2. sekilde ise dogru sonucu aliyoruz. sql fiddle linkleri http://sqlfiddle.com/#!18/055b9/4 http://sqlfiddle.com/#!18/096321/1 umarim anlasilir olmustur. hacım şeye anlatır gibi anlatmışsın eline emeğine sağlık. hala forumlarda byle insanlar varmış dedirttin bana çok teşekkür ediyorum.

Merhaba arkadaşlar Stok takibini trigger ile yapmak istiyorum fakat karşılaştığım bir sorun var çzemedim. 3 tip ürün grubum var. Satışı yapılan ürünleri "TopluSatisSub" tablosunda tutuyorum. ürünleri de "Urun_Tip"ine gre stoktan düşüyorum. Aşağıdaki gibi... ALTER trigger . on . for insert as begin declare @UrunId int declare @StokAdet int declare @Urun_Tip int Select @UrunId = from inserted Select @StokAdet = from inserted Select @Urun_Tip= from inserted IF @Urun_Tip=1 BEGIN Update dbo. MontajUrun set UrunMevcudu=UrunMevcudu- @StokAdet where MontajUrunID=@UrunId END ELSE if @Urun_Tip=2 BEGIN Update dbo. ServisProduc set UrunMevcudu=UrunMevcudu- @StokAdet where ServisProducID=@UrunId end else if @Urun_Tip=3 BEGIN Update dbo. YedekParca set Mevcudu=Mevcudu- @StokAdet where YedekParcaID=@UrunId END end Fakat yapamadığım şey; Satış formunu düzenlerken bu düzenlemelere gre stok adedini güncelleyemiyorum. rneğim satış adeti 1 olaran ürün sonradan 2 adet olarak düzeltildiğinde stoktan yeni girilen stok adedi ile nceki stok adenin farkı kadar stok düşülmesi yada artırılması gerekiyor. malum trigger larda update before diye birşey olmadığı için bunu yukarıdaki gibi kolay bir şekilde yapamıyorum Bu konuda yardımcı olabilecek var mı? Asayisci tarafından 04/Şub/21 01:54 tarihinde düzenlenmiştir

Hocam senin icin iki adet sql fiddle hazirladim birincisindeki trigger sende isaret etmeye calistigim hatalarin oldugu sekilde CREATE TABLE ( INT IDENTITY(0,1), INT); CREATE TRIGGER ON AFTER UPDATE AS BEGIN DECLARE @dID INT DECLARE @dValue INT SELECT @dID = FROM INSERTED SELECT @dValue = FROM INSERTED UPDATE SET = @dValue + 5 WHERE = @dID END; INSERT INTO VALUES (5), (10), (15); ikincisindeki trigger ise duzeltilmis hali CREATE TABLE ( INT IDENTITY(0,1), INT); CREATE TRIGGER ON AFTER UPDATE AS BEGIN UPDATE SET = . + 5 FROM INNER JOIN INSERTED ON . = . END; INSERT INTO VALUES (5), (10), (15); ikisinde de ayni asagidaki kodu calistiriyorum SELECT FROM ; UPDATE SET = 100 WHERE IN (0, 1, 2); SELECT FROM ; normal sartlarda, trigger amacina uygun calisinca, butun satirlarin yeni attigim degerden 5 fazlasi olmasi beklenir. yani hepsi 105 olmali ancak 1. sekilde asagidaki sonucu aliyoruz. 2. sekilde ise dogru sonucu aliyoruz. sql fiddle linkleri http://sqlfiddle.com/#!18/055b9/4 http://sqlfiddle.com/#!18/096321/1 umarim anlasilir olmustur. ..

Forumda biraz araştırma yaptıktan sonra trigger deleted tablosundan sorgu yapabileceğimi ve sorunumu aşağıdaki şekilde çzebileceğimi ğrendim. :) lazım olursa diye şurada dursun ALTER trigger . on . after Update as begin declare @UrunId int declare @StokAdet int declare @Urun_Tip int declare @OncekiAdet int declare @SatisAltID int declare @GuncelAdet int Select @UrunId = from inserted Select @StokAdet = from inserted Select @Urun_Tip= from inserted select @SatisAltID= from inserted select @OncekiAdet= from deleted where @SatisAltID= set @GuncelAdet=@OncekiAdet-@StokAdet IF @Urun_Tip=1 BEGIN Update dbo. MontajUrun set UrunMevcudu=UrunMevcudu+@GuncelAdet where MontajUrunID=@UrunId END ELSE if @Urun_Tip=2 BEGIN Update dbo. ServisProduc set UrunMevcudu=UrunMevcudu+@GuncelAdet where ServisProducID=@UrunId end else if @Urun_Tip=3 BEGIN Update dbo. YedekParca set Mevcudu=Mevcudu+@GuncelAdet where YedekParcaID=@UrunId END end

hacım şeye anlatır gibi anlatmışsın eline emeğine sağlık. hala forumlarda byle insanlar varmış dedirttin bana çok teşekkür ediyorum. ne demek, ben tesekkur ederim hocam, iyi calismalar. ..

trigger yazarken tek satir gelecekmis gibi kod yazman disinda bir problem yok. ama bahsettigim problem de hic de yamana atilacak bir problem degil haberin olsun. https://stackoverflow.com/a/408381 guru tarafından 04/Şub/21 18:58 tarihinde düzenlenmiştir..

Asayisci bunu yazdı guru bunu yazdı trigger yazarken tek satir gelecekmis gibi kod yazman disinda bir problem yok. ama bahsettigim problem de hic de yamana atilacak bir problem degil haberin olsun. https://stackoverflow.com/a/408381 şuanki haliyle birden fazla satır geldiğinde de çalışıyor diye biliyorum ama yanılıyor muyum? çoklu satır derken tam olarak neyi kastettin hocam. ornek olarak update set = + 5 where in (1,2,3,4) seklindeki bir sorgu sonucu, senin trigger 1 kere calistirilir ancak inserted ve deleted tablolarinda 4 satir vardir. ancak senin trigger Select @UrunId = from inserted su sekilde kodlar icerdigi icin, yanlizca son satir icin trigger gorevini yerine getirir. Cunku @UrunId 4 olur. halbuki birden fazla deger var inserted ve deleted icinde onun yerine ornegin Update dbo. MontajUrun set UrunMevcudu=UrunMevcudu- @StokAdet where MontajUrunID=@UrunId bu sorgu yerine Update dbo. MontajUrun set UrunMevcudu=UrunMevcudu- @StokAdet where MontajUrunID in bu sekilde yapman lazim. hocam inan hiçbirşey anlamadım. Bu biraz da benden kaynaklı.trigger konusunda çok iyi değilim. Ancak şu haliyle veritabanına sorgu gnderiyorum C# tarafında. SatisID si atıyorum 10 olan tüm ürünlerin adetlerini 5 yap diyorum. listede 4 ürün var. 4 ününde 1 olan adetleri 5 oluyor. ve stok adetleri otomatik olarak -5'e düşüyor. (başlangıçta stok adetleri "0" ) problemsiz çalışıyor gibi grünüyor. yanıldığım nokta neresi. ileride nerde sorun yaşarım?