Aracılığıyla paylaş


Zaman tabanlı satır filtreleri için en iyi yöntemler

Genellikle kullanıcıların uygulamaları gerektiren bir saat-bir tablodan veri alt küme küme kümesini temel alan.İçin örnek, Kotalı veri siparişler için geçen hafta gerektirebilir veya olay planlayıcısı veri olaylar için gelecek hafta gerektirebilir.Çoğu durumda, uygulamaları içeren sorgular kullanın GETDATE() Bunu gerçekleştirmek için işlev.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 bir filtre ile Birleştirme Aracısı çalışırken iki şey her zaman oluşabilecek genellikle varsayılır: Bu filtre karşılayan satırları abonelerine çoğaltılır; ve artık bu filtre karşılayan satırları aboneleri temizlenir.(İle filtreleme hakkında daha fazla bilgi için HOST_NAME(), see Parametreli satır filtreleri.) Ancak, birleştirme çoğaltma çoğaltır ve bu verileri için bir satır filtre tanımlamak ne olursa olsun son eşitlemeden sonra değişen verileri temizler.

Mektup birleştirme için çoğaltma bir satır işlemek için satırdaki veriler satır filtre karşılamak ve son eşitleme işleminden sonra değişmiş.Durumunda, SalesOrderHeader tablo, SiparişTarihi bir satır eklendiğinde girilir.Satır Ekle bir veri değişikliği nedeniyle beklendiği gibi abone ile çoğaltılır.Abone adresindeki artık (yedi günden daha eski olan siparişler için olmalarına) filtre karşılayan satırları varsa, herhangi bir nedenle güncelleştirildi sürece ancak, aboneden kaldırılmazlar.

Bu tür süzme işlemi sorun olay planlayıcısı daha durum 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ı.Satır filtre karşılayan bile Satır Ekle önümüzdeki hafta bir olay için bir ay önce yapıldı ve başka bir nedenle satır güncelleştirildiği, abone ile çoğaltılmaz.

Buna ek olarak, yayın nasıl yapılandırıldığına bağlı olarak, birleştirme çoğaltma farklı zamanlarda filtreler olarak değerlendirilir:

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

  • yayın precomputed bölümleri kullanın, Birleştirme Aracısı çalıştırır, filtreleri değerlendirilir.

Precomputed bölümleri hakkında daha fazla bilgi için bkz: Parametreli Filtresi performans Precomputed bölümleri ile en iyi duruma getirme.Hangi verileri filtre karşılar, filtre değerlendirilir saat etkiler.Örneğin, iki gün daha eski yayın precomputed bölümleri kullanır ve iki günde verileri eşitlemek, verinin alt küme küme kümesini satış temsilcileri en fazla satır içerebilir bekleniyordu.

Zaman tabanlı satır filtrelerini kullanma ile ilgili öneriler

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

  • Bir sütuna ekleme tablo veri türü bit.Bu sütun, satır çoğaltılır göstermek için kullanılır.

  • saat tabanlı sütun yerine yeni bir sütun başvuran bir satır filtresini kullanın.

  • sql Server Agent iş (veya başka bir mekanizması ile zamanlanmış bir işi) güncelleştirmelerinin sütun önce Birleştirme Aracısı çalışacak şekilde zamanlanır.

Bu yaklaşımı kullanarak, eksikliklerinin adresleri GETDATE() ya da başka bir zamana dayalı yöntem ve ne saat filtreleri için bölümler. değerlendirileceğini belirler zorunda kalmadan sorunu önlerAşağıdaki örneği düşünün bir olaylar tablo:

Olay Kimliği

EventName

EventCoordID

EventDate

Çoğaltma

1

Resepsiyon

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 filtre sonra şu şekilde görünecektir:

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

sql Server Agent iş verebilir yürütmek Transact-SQL ifadeleri her birleştirme Çalıştır Aracısı önce aşağıdakine benzer:

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

İlk satır sıfırlar çoğaltmak için sütun 0, ve ikinci satırı, sütunu ayarlar 1 sonraki yedi gün içinde meydana gelen olayları için.Bu, Transact-SQL deyim 07/10/2006 tarihinde çalışır, tablo için güncelleştirilir:

Olay Kimliği

EventName

EventCoordID

EventDate

Çoğaltma

1

Resepsiyon

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 için olayları şimdi çoğaltmak hazır olacak şekilde işaretlenir.Sonraki saat Birleştirme Aracısı abonelik için bu olay Koordinatör 112 kullanır çalışır, abone ile satır 2, 3 ve 4 yüklenen ve satır 1 aboneden kaldırılır.