sys.fn_cdc_map_time_to_lsn (Transact-SQL)
günlük sıra numarası (SSN) verir start_lsn sütun cdc.lsn_time_mappingsistem tablosu belirtilen saat. Datetime aralıkları SSNsistematik eşlemek için bu işlev kullanabilirsiniz-tabanlı aralık tarafından değişiklik veri numaralandırma fonksiyonları da yakalamak cdc.fn_cdc_get_all_changes_<capture_instance> ve cdc.fn_cdc_get_net_changes_<capture_instance> veri değişiklikleri aralıkdönmek.
Sözdizimi
sys.fn_cdc_map_time_to_lsn ( '<relational_operator>', tracking_time )
<relational_operator> ::=
{ largest less than
| largest less than or equal
| smallest greater than
| smallest greater than or equal
}
Bağımsız değişkenler
'<relational_operator>' {değerinden daha az en büyük | değerinden daha az en büyük veya eşit | en küçük değerden | en küçük büyük veya eşit}
İçinde ayrı SSN değeri tanımlamak için kullanılan cdc.lsn_time_mapping ile ilişkilendirilmiş birtablo tran_end_time karşılaştırıldığında ilişkisi karşılayan tracking_time değer.relational_operatoris nvarchar(30).
tracking_time
Karşı eşleştirmek için tarih saat değeridir.tracking_timeis datetime.
Dönüş Türü
binary(10)
Açıklamalar
Anlamak için nasıl sys.fn_cdc_map_time_lsn kullanılabilecek SSN aralığı için datetime aralıkları eşleştirmek için aşağıdaki senaryoyu düşünün.Tüketici değişiklik veri ayıklamak gün vermek istediğini varsayalım.Yani tüketici, belirli gün ve dahil olmak üzere gece için yalnızca değişiklikleri ister.saataralık alt sınırı kadar ancak önceki gün gece yarısından kapsamayan olacaktır. Üst sınır kadar ve belirli günü gece yarısından dahil olacaktır.Aşağıdaki örnekte gösterildiği nasıl işlevsys.fn_cdc_map_time_to_lsn bu saatsistematik eşlemek için kullanılan- SSN aralık dayalı-tabanlı aralık tarafından değişiklik veri aralıktüm değişiklikleri geri dönmek için numaralandırma fonksiyonları da yakalamak.
DECLARE @begin_time datetime, @end_time datetime, @begin_lsn binary(10), @end_lsn binary(10);
SET @begin_time = '2007-01-01 12:00:00.000';
SET @end_time = '2007-01-02 12:00:00.000';
SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);
SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);
SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department(@begin_lsn, @end_lsn, 'all');
İlişkisel işleç 'smallest greater than' değişiklikler, önceki gün gece yarısından sonra oluşan kayıtlarla sınırlandırmak için kullanılır.Farklı SSN sahip birden çok girdi değerleri, paylaşım tran_end_time alt sınır olarak belirlenen değeri cdc.lsn_time_mapping tablo, işlev tüm girişlerin dahil edileceğini sağlayarak en küçük SSN döndürecektir.İlişkisel işleç üst bağlı için 'largest less than or equal to' aralık olarak gece'den dahil olmak üzere günün tüm girişleri içerir emin olmak için kullanılır, tran_end_time değer.Farklı SSN sahip birden çok girdi değerleri, paylaşım tran_end_time işlev üst sınır belirlenen değer, tüm girişlerin dahil edileceğini sağlayarak en büyük SSN döndürecektir.
İzinler
Üyelik gerektiren ortak rolü.
Örnekler
Aşağıdaki örnek sys.fn_cdc_map_time_lsnbir satır olup olmadığını belirlemek içinişlev cdc.lsn_time_mapping tablo ile bir tran_end_time gece yarısına eşit veya büyük bir değer. Bu sorgu, örneğin, ayıklanması değiştirmek böylece veri o gün için yakalama işlemi zaten önceki gün gece kaydedilen değişiklikleri işlediği mi devam belirlemek için kullanılabilir.
DECLARE @extraction_time datetime, @lsn binary(10);
SET @extraction_time = '2007-01-01 12:00:00.000';
SELECT @lsn = sys.fn_cdc_map_time_to_lsn ('smallest greater than or equal', @extraction_time);
IF @lsn IS NOT NULL
BEGIN
<some action>
END