Aracılığıyla paylaş


saat tabanlı satır süzgeçleri için en iyi uygulamalar

Kullanıcılar, uygulamalar genellikle, zamana bağlı verilerin alt küme küme küme kümesini bir tablodan gerektirir.Örneğin, geçen hafta bir satışçı veri siparişlerini gerektirebilir veya bir olay planlayıcısını veri gelecek hafta olaylar için gereksinim duyabilir.Çoğu durumda, uygulamalar içeren bir sorgu kullanmak GETDATE() Bunu yapmak için işlev'ı tıklatın. Aşağıdaki satır Filtre deyim göz önünde bulundurun:

WHERE SalesPersonID = CONVERT(INT,HOST_NAME()) AND OrderDate >= (GETDATE()-6)

Bu tür filtreyle, genellikle Birleştirme Aracısı'nı çalıştırdığında, iki şey her zaman ortaya olduğunu kabul edilir: Bu süzgeç karşılayan satırları abonelerine; çoğaltılır ve aboneleri artık bu süzgeci karşılayan satırları temizlediğini. (Ile filtreleme hakkında daha fazla bilgi için HOST_NAME(), bkz: Parametreli satır süzgeçleri.) Ancak, birleştirme çoğaltma yalnızca çoğaltılır ve bu veriler için bir satır süzgeç tanımladığınız ne olursa olsun son eşitlemeden sonra değişen verileri temizler.

Birleştirme çoğaltma, satır işlemek veri satırı satır süzgeç yinelenip yinelenmeyeceği ve bu şekilde, son eşitleme işleminden sonra değişmiş.Söz konusu SalesOrderHeader tablo, Sipariş tarihi satır eklendiğinde girildi.Satır abone için ekleme, bir veri değişikliği olduğundan beklendiği gibi çoğaltılır.Abone adresindeki süzgeci (yedi günden daha eski olan siparişler için oldukları) artık karşılayan satırları varsa, bunlar diğer herhangi bir nedenle güncelleştirildi sürece ancak abone kaldırılmazlar.

Daha fazla olay planlayıcısı, durum, bu tür süzme işlemi sorun vurgular.Aşağıdaki filtre için göz önünde bir Olayları tablo:

WHERE EventCoordID = CONVERT(INT,HOST_NAME()) AND EventDate <= (GETDATE()+6)

Olaylar içeren bir tablo ekler de olay tarih önünde yapılması.Bu satır süzgeç karşılayan bile, gelecek haftadaki olay ekleme, bir ay önce yapıldı ve başka bir nedenle satır güncelleştirildi, satır için abone çoğaltılmaz.

Buna ek olarak, yayın nasıl yapılandırıldığına bağlı olarak, birleştirme çoğaltma süzgeçleri farklı zamanlarda değerlendirir:

  • yayın precomputed bölümleri (varsayılan) kullanıyorsa, bir satır eklendiğinde veya güncelleştirildiğinde süzgeçleri değerlendirilir.

  • Birleştirme Aracısı'nı çalıştırdığında, yayın precomputed bölümleri kullanmıyorsa, süzgeçler değerlendirilir.

Precomputed bölümleri hakkında daha fazla bilgi için bkz: Parametreli süzgeç performans Precomputed bölümleri ile en iyi duruma getirme. Süzgeç değerlendirildiği saat, hangi verilerin süzgeç karşılayan etkiler.Örneğin, iki gün sonunda precomputed bölümleri, bir yayın kullanır ve verilerin her iki günde bir eşitleme, satış temsilcisi için verilerin alt küme küme kümesini en çok satır içerebilir bekleniyordu.

saat tabanlı satır süzgeçler kullanmaya yönelik öneriler

Aşağıdaki yöntem göre süzme için güçlü ve kolay bir yaklaşım sağlar saat:

  • sütun veri türünün tabloya ekleyin... bit. Bu sütun, satır çoğaltılacağı olup olmadığını belirtmek için kullanılır.

  • Yeni bir sütun başvuran satır filtre kullanmak yerine bir saat - tabanlı sütun.

  • Bir SQL Server Agent iş (veya başka bir düzenek zamanlanmış bir işi) birleştirme aracının çalışması için zamanlandığı önce sütun güncelleştirir.

Bu yaklaşım eksikliklerinin, kullanmaya yöneliktir. GETDATE() veya başka bir zamana dayalı bir yöntem ve süzgeç bölümler için ne saat değerlendirildiği belirlemek zorunda kalmadan bu sorunu engeller. Aşağıdaki örneği deneyin bir Olayları tablo:

Eventıd

EventName

EventCoordID

EventDate

Çoğaltma

1

Alma

112

2006-10-04

1

2

Akşam Yemeği

112

2006-10-10

0

3

Parti

112

2006-10-11

0

4

Wedding

112

2006-10-12

0

Bu tablo için satır süzgeç sonra aþaðýdaki gibi görünür:

WHERE EventCoordID = CONVERT(INT,HOST_NAME()) AND Replicate = 1

SQL Server Agent iş verebilir yürütmek Transact-SQL Her Birleştirme Aracısı önce aşağıdakine benzer bir ifade çalıştırın:

UPDATE Events SET Replicate = 0 WHERE Replicate = 1
GO
UPDATE Events SET Replicate = 1 WHERE EventDate <= GETDATE()+6
GO

Ilk satır sıfırlar Çoğaltma sütunu0ve ikinci satır ayarlar sütun için1 sonraki yedi gün içinde gerçekleşen olayları.Bu, Transact-SQL deyim 10/07/2006 üzerinde çalışır, tablo biçimde güncelleştirilmiştir:

Eventıd

EventName

EventCoordID

EventDate

Çoğaltma

1

Alma

112

2006-10-04

0

2

Akşam Yemeği

112

2006-10-10

1

3

Parti

112

2006-10-11

1

4

Wedding

112

2006-10-12

1

Gelecek hafta olayları şimdi çoğaltmak hazır olarak bayrakla işaretlenir.Birleştirme Aracısı abonelik için bu olay koordinatörü 112 sonraki çalıştırdığında kullanır, 2, 3 ve 4 satır, abone için yüklenir ve sonra da Satır 1 abone will be removed.