ForumSevgisi.Com

  ForumSevgisi.Com > ForumSevgisi Webmaster Bölümü > Webmaster Genel

Webmaster Genel Webmasterlıkla ilgili Her şeyin Paylaşıldığı Bölüm.


Sql serverde veritabanı-3

Webmasterlıkla ilgili Her şeyin Paylaşıldığı Bölüm.


Sql serverde veritabanı-3

ForumSevgisi Webmaster Bölümü Kategorisinde ve Webmaster Genel Forumunda Bulunan Sql serverde veritabanı-3 Konusunu Görüntülemektesiniz,Konu İçerigi Kısaca ->> Sql serverde veritabanı-3 @@ROWCOUNT değişkeni tabloda yapılan son işlem sonucunda kaç kaydın etkilendiğini tutan bir SQL Server değişkenidir. Değişik maksatlar ...

Kullanıcı Etiket Listesi

Yeni Konu aç  Cevapla
LinkBack Seçenekler Stil

Okunmamış 20 Mart 2015, 22:40   #1
Durumu:
Çevrimdışı
IDurDurBeni
Düşmanlara inat Mücadeleye devam...
IDurDurBeni - ait Kullanıcı Resmi (Avatar)
Arastirmaci
Üyelik tarihi: 12 Mart 2015
Mesajlar: 164
Konular: 95
Beğenilen: 49
Beğendiği: 64
www.forumsevgisi.com
Standart Sql serverde veritabanı-3

Sql serverde veritabanı-3

@@ROWCOUNT değişkeni tabloda yapılan son işlem sonucunda kaç kaydın etkilendiğini tutan bir SQL Server değişkenidir. Değişik maksatlar için bu değişkenden etkili bir biçimde yararlanılabilir. Aşağıdaki triggerda @@ROWCOUNT performansı artırmak için kullanılmıştır. Tabloya eklenen kayıt miktarına göre hareket ederek tek bir kayıt eklendiğinde ekstra zaman kaybına neden olan GROUP BY ifadesini kullanmaksızın diğer tabloda değişikliği gerçekleştirir.
CREATE TRIGGER intrig
ON sales
FOR INSERT AS
/* @@rowcount değerinin kontrol edilmesi*/
IF @@rowcount = 1
UPDATE titles
SET ytd_sales = ytd_sales qty
FROM inserted
WHERE titles.title_id = inserted.title_id
ELSE
/* rowcount 1' den büyük olduğu zaman,
**GROUP BY ifadesi kullanılır */
UPDATE titles
SET ytd_sales = ytd_sales (SELECT SUM(qty)
FROM inserted
GROUP BY inserted.title_id
HAVING titles.title_id = inserted.title_id)
Triggerlar ile uygulamaya özel bazı kontrol edilebildiğini belirtmiştik. Aşağıdaki örnekte 20' den fazla satışı bulunan bir satış noktasının silinmesine izin vermeyen bir kural implemente edilmiştir.
CREATE TRIGGER trDelSales
ON tblSales
FOR DELETE AS
IF (SELECT COUNT(*) FROM deleted
WHERE deleted.qty >= 20) > 0
BEGIN
PRINT `Bu satış noktalarından birini silemezsiniz.'
PRINT `Bazılarının 20' den fazla satışı mevcuttur!'
PRINT `Transaction geri alınacaktır!'
ROLLBACK TRANSACTION
END
Triggerlar farklı tablolardan birbirine referans yapan verilerin bütünlüğünü sağlamak için kullanıldığında bir hususa dikkat edilmelidir. Veri üzerinde değitiklik olduğunda en son kontrol sırası triggera gelir. Eğ tabloda bir constraint tanımlanmış ise önce o kontrol edilir. Dolayısıyla bir kısıta uyulmadığı zaman trigger hiç bir zaman çalışmayacaktır. Ancak constraint tanımlanmamış tablolarda triggerlar etkili bir biçimde delete ve update işlemlerinin veri bütünlüğünü bozup bozmadığını kontrol edebilir.
CREATE TRIGGER trInsUpdSales
ON tblSales
FOR INSERT, UPDATE AS
IF (SELECT COUNT(*) FROM tblStores, inserted
WHERE tblStores.stor_id = inserted.stor_id) = 0
BEGIN
PRINT `Girmiş olduğunuz stor_id stores tablosunda'
PRINT `mevcut değildir. Kontrol ediniz!'
ROLLBACK TRANSACTION
END

Bu trigger sadece tek bir insert ya da update olayı gerçekleştiğinde kusursuz çalışır. Birden fazla kayıtla karşı karşıya kalındığı zaman yapılması gereken işlem daha farklı olacaktır. Aşağıdaki örnek için inserted tablosuna eklenen kayıt sayısı ve eklenen satış miktarı karşılaştırılır. Çoklu kayıt problemi bu şekilde çözülür.
CREATE TRIGGER trInsUpdSales
ON tblSales
FOR INSERT, UPDATE AS
DECLARE @rc int
SELECT @rc = @@rowcount
IF (SELECT COUNT(*) FROM tblStores, inserted
WHERE tblStores.stor_id = inserted.stor_id) = 0
BEGIN
PRINT `Girmiş olduğunuz stor_id stores tablosunda'
PRINT `mevcut değildir. Kontrol ediniz!'
ROLLBACK TRANSACTION
END
IF (SELECT COUNT(*) FROM tblSales, inserted
WHERE tblSales.stor_id = inserted.stor_id) <> @rc
BEGIN
PRINT `Girilen satışların bazılarının stor_id`
PRINT `değeri stores tablosunda bulunamamıştır!'
ROLLBACK TRANSACTION
END
Trigger ve Stored Procedure' lerı karşılaştırırsak her ikisi de önceden derlenmiş SQL ifadeleri olduğundan hemen hemen aynı hızda ve aynı overhead miktarına sahiptirler. SQL Server' ın işlem sırası, önce View ve Stored Procedure' lerı sonra Trigger' ları çalıştıracak şekildedir. Daha iyi performans elde etmek için mümkün olduğu kadar trigger seviyesine inilmemeye gayret edilmelidir. Eğer problemi stored procedure içinde yakalayabiliyorsak trigger yüzünden, yapılan her şeyin geri alınması gerekmez.
Alıntı ile Cevapla
Yeni Konu aç  Cevapla

Etiketler
serverde, sql, veritabani3

Seçenekler
Stil


Saat: 18:41

Forum Yasal Uyarı
vBulletin® ile Oluşturuldu
Copyright © 2016 vBulletin Solutions, Inc. All rights reserved.

ForumSevgisi.Com Her Hakkı Saklıdır
Tema Tasarım:
Kronik Depresif


Sitemiz bir 'paylaşım' sitesidir. Bu yüzden sitemize kayıt olan herkes kontrol edilmeksizin mesaj/konu/resim paylaşabiliyorlar. Bu sebepten ötürü, sitemizdeki mesaj ya da konulardan doğabilecek yasal sorumluluklar o yazıyı paylaşan kullanıcıya aittir ve iletişim adresine mail atıldığı taktirde mesaj ya da konu en fazla 48 saat içerisinde silinecektir.

ankara escort, izmir escort ankara escort, ankara escort bayan, eryaman escort, bursa escort pendik escort, antalya escort,