Bölümlenmiş görünümümde silme işlemi neden Kümelenmiş Dizin Ekleme ile sonuçlanıyor?


9

Aşağıdaki ekleme tetikleyicisi (kötü mans bölümü) olan bir bölümlenmiş görünüm var. Bir DELETE gerçekleştirdiğimde, aşağıdaki sorgu planını alıyorum:

delete from factproductprice where pricedate = '20170725'

resim açıklamasını buraya girin

Görünümde tetikleme:

ALTER TRIGGER [dbo].[factProductPriceDelete] ON [dbo].[FactProductPrice]
INSTEAD OF DELETE AS
BEGIN
  IF @@ROWCOUNT = 0 RETURN;

  DECLARE @PriceDate DATE
  SELECT @PriceDate = CAST(PriceDate AS DATE) FROM DELETED
  IF @PriceDate BETWEEN '20140101' AND '20141231'
  BEGIN
    DELETE FROM dbo.FactProductPrice2014
    WHERE ProductId IN (SELECT ProductId FROM DELETED) AND SalesPriceSchemeId IN (SELECT SalesPriceSchemeId FROM DELETED) AND PriceDate IN (SELECT PriceDate FROM DELETED) 
  END
  IF @PriceDate BETWEEN '20150101' AND '20151231'
  BEGIN
    DELETE FROM dbo.FactProductPrice2015
    WHERE ProductId IN (SELECT ProductId FROM DELETED) AND SalesPriceSchemeId IN (SELECT SalesPriceSchemeId FROM DELETED) AND PriceDate IN (SELECT PriceDate FROM DELETED) 
  END
  IF @PriceDate BETWEEN '20160101' AND '20161231'

.... vb

Yanıtlar:


11

INSTEAD OF tetikler tetikleme eyleminin tamamen yerini alır.

Sokulmuş ve silinen sözde tablolar yapılmış olurdu değişiklikleri temsil tetikleme ifadesi aslında, idam edilmişti. Tanım gereği henüz bir değişiklik yapılmadığından, satır tetikleme bu tetikleyiciler için kullanılamaz.

SQL Server, bir INSTEAD OFtetikleyici bulunduğunda tetikleyici DML ifadesi için yürütme planını değiştirir . Etkilenen tabloları doğrudan değiştirmek yerine, yürütme planı, değişiklikler hakkında gizli bir çalışma masasına bilgi yazar.

Bu çalışma masası, orijinal değişiklikleri gerçekleştirmek için gereken tüm verileri, her satırda gerçekleştirilecek değişiklik türünü (silme veya ekleme) ve bir OUTPUTcümle için tetikleyicide gereken bilgileri içerir .

Yürütme planınızdaki Ekle, bu gizli çalışma masasına yazmayı temsil eder. İfade için yürütme sonrası bir plan yakaladığınızda, bu gizli çalışma tablosunun silinen ve eklenen sahte tablolar olarak kullanıldığını göreceksiniz .

Tetikleyicilerin INSTEAD OF ilginç hakkında SQLPerformance.com makaleme bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.