Aracılığıyla paylaş


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

Uygulamaları genellikle zaman aşamalı verilerin bir alt kümesini bir tablo gerektirir. Örneğin, bir satış temsilcisi, siparişler için geçen hafta veri gerektirebilir veya bir olay planlayıcısı, olaylar için gelecek hafta veri gerektirebilir. Birçok durumda, içeren sorgular kullanma GETDATE()işlevi gerçekleştirmek için. Aşağıdaki satır filtre ifadesi göz önünde bulundurun:

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

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

Bu tür bir filtre ile o genellikle birleştirme aracı çalıştırıldığında iki şey her zaman ortaya 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()bakın Parametreli satır süzgeçleri.) Ancak, birleştirme çoğaltması yalnızca çoğaltır ve nasıl bu verileri bir satır filtre tanımlamak bakılmaksızın son eşitleme sonra değişti verileri temizler.

Birleştirme çoğaltması bir satır işlemek veri satır satır filtre karşılamak gerekir ve son eşitleme işleminden sonra değişmiş olmalıdır. Durumunda SalesOrderHeader tablo SiparişTarihi bir satır eklendiğinde girilir. Satır ekleme veri değişikliği olduğundan beklendiği gibi abone çoğaltılır. Artık (siparişleri yedi günden daha eski olduklarını) filtre karşılayan satırları abone varsa, başka bir nedenden dolayı güncelleştirildiğini sürece ancak abone kaldırılmazlar.

Olay planlayıcısı daha büyük sorunu ile bu tür filtreleme vurgular. Aşağıdaki filtre düşünün bir olaylar tablosu:

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

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

Olayları içeren bir tablo için ekler de olay tarihi öncesinde yapılmış olabilir. Satır filtre karşılayan bile satır eklemek için önümüzdeki hafta bir olay bir ay önce yapılan ve başka bir nedenle satır güncelleştirilmedi, abone çoğaltılmaz.

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

  • 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ı çalıştırıldığında 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 filtre değerlendirildiği zaman, hangi verileri filtre karşılayan etkiler. Örneğin, iki gün daha eski bir Yayını precomputed bölümleri kullanıp ve iki günde verileri eşitlemek, satış elemanı için veri alt kümesini kadar satır içerebilir bekleniyor.

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

Aşağıdaki yöntem zamana dayalı süzme için sağlam ve anlaşılır bir yaklaşım sağlar:

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

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

  • SQL Server Agent iş (veya başka bir mekanizmayla zamanlanmış bir işi) güncelleştirmelerinin sütun birleştirme aracı çalıştırmak için önce.

Bu yaklaşımı kullanarak eksiklikleri giderir GETDATE()ya da başka bir zamana dayalı yöntem ve filtreleri bölümler için zaman değerlendirilir belirlemek zorunda kalmadan sorunu önler. Aşağıdaki örneği düşünün bir olaylar tablosu:

EventID

EventName

EventCoordID

EventDate

Çoğaltma

1

Alımı

112

2006-10-04

1

2

Akşam yemeği

112

2006-10-10

0

3

Parti

112

2006-10-11

0

4

Düğün

112

2006-10-12

0

Bu tablo için satır filtre sonra aşağıdaki gibi görünür:

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

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

SQL Server Agent iş yürütebilir Transact-SQLdeyimleri çalıştırmak her Birleştirme 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

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 sütun 0, ve ikinci satır sütun ayarlar 1 sonraki yedi gün içinde meydana gelen olaylar. Eğer bu Transact-SQL10/07/2006 çalıştırır, tablo için güncelleştirilir:

EventID

EventName

EventCoordID

EventDate

Çoğaltma

1

Alımı

112

2006-10-04

0

2

Akşam yemeği

112

2006-10-10

1

3

Parti

112

2006-10-11

1

4

Düğün

112

2006-10-12

1

Önümüzdeki hafta olayları şimdi çoğaltmak için hazır olarak işaretlenir. Birleştirme Aracısı abonelik için bu etkinlik Koordinatörü 112 sonraki çalıştırdığında kullanır, 2, 3 ve 4 satır için abone karşıdan yüklenir ve satır 1 abonenin kaldırılacak.

Ayrıca bkz.

Başvuru

GETDATE (Transact-SQL)

Kavramlar

Uygulama işleri

Parametreli satır süzgeçleri