Aracılığıyla paylaş


Parametreli satır filtreleri

Parametreli filtreleri izin farklı bölümlerini farklı aboneleri için birden çok yayınları istemeden oluşturulacağı gönderilecek verileri (parametreli filtreleri bilinir önceki sürümlerinde, dinamik filtre olarak SQL Server).Sadece satırların alt küme küme küme kümesini bölümdür bir tablo; parametreleştirilmiş bir filtre oluştururken seçtiğiniz ayarlara bağlı olarak, her yayımlanmış bir satır tablo yalnızca bir bölümüne ait olabilir (hangi üretir örtüşmeyen bölümleri) veya (, çakışan bölümler üreten) iki veya daha fazla bölüm için.

Örtüşmeyen bölümleri arasında abonelikleri paylaşılabilir veya yalnızca bir abonelik verili bir bölüm alır böylece bunlar Yasak olabilir."Kullanarak uygun filtreleme seçenekleri" bölümü davranışını denetleyen ayarları açıklanmıştır Bu konuda daha sonra.Bu ayarları kullanarak parametreleştirilmiş filtre uygulama ve performans gereksinimlerine göre uyarlayabilirsiniz.Genel olarak, çakışan bölümler daha fazla esneklik sağlamak için izin ve çoğaltılması için tek bir abonelik örtüşmeyen bölümleri daha iyi performans sağlar.

Tek bir parametreli filtreleri kullanılan tablo ve genellikle ilişkili süzme genişletmek için birleştirmek filtreleri ile birleştirilmiş tablos.Daha fazla bilgi için bkz: Filtreler katılın.

Tanımlamak veya değiştirmek için birparametreli satır filtresi

Nasıl parametreli filtreleri çalışma

A parametreli satır filtresi yayımlanmak üzere uygun verileri seçmek için bir where yan tümce tümce tümce kullanır.(statik satır filtresi ile olduğu gibi) bir hazýr bilgi deðeri yan tümce tümce tümcesinde belirtme yerine, aşağıdakilerden birini veya her ikisini aşağıdaki sistem işlevleri belirtin: suser_sname() ve host_name().Kullanıcı tanımlı işlevler da kullanılabilir, ancak bunlar gerekir suser_sname() veya host_name() işlev gövdesine eklemek veya bunlardan birini değerlendirmek sistem işlevleri (gibi MyUDF(SUSER_SNAME()).Kullanıcı tanımlı bir işlevin, işlev gövdesinde suser_sname() veya host_name() içeriyorsa, işlevin parametreleri geçirilemez.

suser_sname() ve host_name() değil birleştirmek için belirli sistem işlevleri çoğaltma, ancak birleştirme tarafından kullanılan çoğaltma süzme parametreli için:

  • suser_sname() yapılan bağlantıları için oturum açma bilgilerini döndüren bir örnek , SQL Server.Parametreli filtre kullanıldığında (abonelik oluşturduğunuzda, bir oturum açma belirtin) yayımcı bağlanmak için Birleştirme Aracısı tarafından kullanılan oturum açma döndürür.

  • host_name() bağlandığı bilgisayar adını döndürür bir örnek , SQL Server.Parametreli filtre kullanıldığında, varsayılan olarak Birleştirme Aracısı çalıştığı bilgisayarın adını döndürür.Çekme abonelikleri için abone adı'dır; gönderme abonelikleri için dağıtıcı alanının adıdır.

    Abone ya da dağıtıcı adı dışında bir değer ile bu işlev geçersiz kılmak mümkündür.Genellikle bu işlev bir satış temsilcisi adı veya Satışçı kimliği gibi daha anlamlı değerlere sahip uygulamalar geçersiz kılDaha fazla bilgi için "host_name() değeri geçersiz kılma" bölümüne bakın. Bu konuda.

Sistem işlev tarafından döndürülen değeri karşılaştırılır, belirttiğiniz sütun tablo , filtreleme ve uygun veri için abone karşıdan yüklenir.Bu karşılaştırma, abonelik başlatıldı (yalnızca uygun veri ilk anlık görüntü içinde bulunur) ve abonelik her saat yapılır.Varsayılan olarak, bir değişiklik olursa yayımcı adresindeki sonuçlar bir bölümü taşınan bir satırda, satır Abone tarafında silinmiş (kullanarak bu davranışı denetlenir @ allow_partition_realignment parametresi sp_addmergepublication (Transact-sql)).

Not

Parametreli filtreleri için karşılaştırma yapıldığında, veritabanı harmanlama her zaman kullanılır.Örneğin, veritabanı harmanlama durum duyarlı, ancak Tablo veya sütun harmanlama durum duyarlı, karşılaştırmanın durum duyarlı olacaktır.

suser_sname() ile filtre uygulama

Göz önünde Employee , tablo Adventure Works örnek veritabanı.Bu tablo içeren sütun LoginID, formdaki her çalışan için oturumu içeren 'etki alanı\login'.Bu tablo filtre çalışanlar yalnızca bunlarla ilgili verileri almak için bir filtre yan tümce tümce tümcesinde belirtin:

LoginID = SUSER_SNAME()

Örneğin, çalışanlar için 'adventure-works\john5' değerdir.Birleştirme Aracısı için yayımcı bağlandığında, abonelik oluşturulurken belirtilen oturum açma kullanır (Bu durum 'adventure-works\john5').Birleştirme Aracısı sonra değerler için suser_sname() tarafından döndürülen değeri karşılaştırır tablo ve 'adventure-works\john5' değerini içeren satır yükler de LoginID sütun.

host_name() ile filtre uygulama

Göz önünde HumanResources.Employee tablo.Varsayalım bu tablo bir sütun olarak yer alan BilgisayarAdı formunda her çalışanın bilgisayar adı ile 'name_computertype'.Bu tablo filtre çalışanlar yalnızca bunlarla ilgili verileri almak için bir filtre yan tümce tümce tümcesinde belirtin:

ComputerName = HOST_NAME()

Örneğin, çalışanlar için değer 'john5_laptop' olabilir.Birleştirme Aracısı için yayımcı bağlandığında, değerler host_name() tarafından döndürülen değeri karşılaştırır tablo ve 'john5_laptop' değerini içeren satır yükler de BilgisayarAdı sütun.

Filtre işlevlerinde birleştirmek mümkündür.Örneğin, bir çalışanın yalnızca kendi oturum açma bilgisayarlarında kullandıkları, verilerin alındığı saðlamak istiyorsanýz, filtre yan tümce tümce tümce aşağıdakilerden biri olabilir:

LoginID = SUSER_SNAME() AND ComputerName = HOST_NAME()

host_name() ile filtreleme host_name() değeri geçersiz kılma sürece genellikle yalnızca çekme abonelikleri ile kullanılır.işlev tarafından döndürülen değeri Birleştirme Aracısı çalıştığı bilgisayarın adıdır.Çekme abonelikleri için değer her abonelik için farklı, ama gönderme abonelikleri için değer (tüm birleştirme gönderme abonelikleri için dağıtıcı çalıştırılacak aracıları) aynıdır.

Güvenlik notuGüvenlik Notu

host_name() işlev değeri geçersiz kılınabilir; Bu nedenle bölümleri veri erişimi denetlemek için host_name() dahil filtreleri kullanmak mümkün değildir.Bölümler veri erişimi denetlemek için suser_sname(), host_name() ile birlikte suser_sname() veya statik satır filtreleri kullanın.

host_name() değeri geçersiz kılma

Daha önce de belirtildiği gibi varsayılan olarak host_name() bağlandığı bilgisayar adını döndürür bir örnek , SQL Server.Parametreli filtreleri kullanırken, bir abonelik oluşturduğunuzda, bir değer sağlayarak bu değeri geçersiz kılmak için ortaktır.host_name() işlev daha sonra bilgisayar adı yerine belirttiğiniz değeri döndürür.

Not

host_name() geçersiz kılmak olursa, tüm host_name() işlev çağrıları, belirttiğiniz değerle döner.Diğer uygulamalar üzerinde bilgisayar adını döndüren host_name() bağlı değil emin olun.

Göz önünde HumanResources.Employee tablo.Bu tablo içeren sütun EmployeeID.Böylece her çalışan yalnızca bunlarla ilgili verileri alır Bu tablo filtre uygulamak için bir filtre yan tümce tümce tümcesinde belirtin:

EmployeeID = CONVERT(int,HOST_NAME())

Örneğin, bir çalışan kimliği 280 çalışan Pamela Ansman-Wolfe atanmıştır.Çalışan kimliği (örneğimizde 280) değerinin, bu çalışan için bir abonelik oluştururken, host_name() değeri belirtin.Birleştirme Aracısı için yayımcı bağlandığında, değerler host_name() tarafından döndürülen değeri karşılaştırır tablo ve 280'de değeri içeren satır yükler EmployeeID sütun.

Önemli notÖnemli

host_name() işlev döndüren bir nchar değer bir sayısal veri türü, sütun filtre yan tümce tümce tümcesinde ise Yukarıdaki örnekte olduğu gibi convert kullanmalısınız.Performansı düşürmemek için İşlevler parametreli satır filtresi yan tümcesi, sütun adları gibi uygulanamaz olduğunu öneririz CONVERT(nchar,EmployeeID) = HOST_NAME().Bunun yerine, örnekte gösterilen yaklaşım kullanmanızı öneririz: EmployeeID = CONVERT(int,HOST_NAME()).This clause can be used for the @subset_filterclause parameter of sp_addmergearticle, but it typically cannot be used in the New Publication Wizard (the wizard executes the filter clause to validate it, which fails because the computer name cannot be converted to an int).Yeni Yayın Sihirbazı'nı kullanırsanız, belirtme öneririz CONVERT(nchar,EmployeeID) = HOST_NAME() Sihirbazı'nı ve sonra kullanın sp_changemergearticle yan tümce tümce değiştirmek için EmployeeID = CONVERT(int,HOST_NAME()) bir anlık görüntü yayını oluşturmadan önce

host_name() değeri geçersiz kılmak için

host_name() değeri geçersiz kılmak için aşağıdaki yöntemlerden birini kullanın:

Parametreli filtreleri ile yayınına abonelik başlatılıyor

Parametreli satır filtre birleştirme yayımları içinde kullanıldığında, çoğaltma her abonelik iki parçalı bir anlık görüntü ile başlatır.Daha fazla bilgi için bkz: Anlık görüntüler için birleştirme yayınları ile parametreli süzgeçleri.

Uygun süzme seçeneklerini kullanma

İki anahtar alanı üzerinde parametreli filtreleri kullanırken denetiminiz vardır:

  • Filtreleri birleştirme tarafından nasıl işleneceğini çoğaltma, hangi denetlenebilir bir iki yayın ayarları: Bölüm grupları kullanmak ve bölüm değişiklikleri tutmak.

  • Nasıl veri aboneleri, makale ayarı tarafından yansıtılan arasında paylaşılan bölüm seçenekleri.

İçin küme filtreleme seçenekleri

'Bölümü grupları Kullan' ayarlama ve 'bölüm değişiklikleri tutmak'

Her iki bölüm grupları kullanmak ve bölüm değişiklikleri tutmak seçenekleri ek meta verilerler depolayarak süzülmüş makaleleri içeren yayınlar için eşitleme performansını artırmak yayın veritabanı.The use partition groups option provides greater performance improvement through the use of the precomputed partitions feature.Bu seçenek, küme için true yayınınızdaki makaleleri bağlı, varsayılan olarak bir küme gereksinimleri.Bu gereksinimler hakkında daha fazla bilgi için bkz: Parametreli Filtresi performans Precomputed bölümleri ile en iyi duruma getirme.Makalelerinizi precomputed bölümler kullanma gereksinimleri karşılıyorsa, bölüm değişiklikleri tutmak seçenek için küme için true.

'Bölüm Seçenekleri' ayarlama

İçin bir değer belirtmeniz bölüm seçenekleri bir makale, göre filtre uygulanmış veri biçiminde oluştururken özellik tablo aboneler tarafından paylaşılmaz.Özellik olabilir küme kullanarak dört değerlerden birini sp_addmergearticle, sp_changemergearticleve Makale özelliklerini iletişim kutusu.Özellik olabilir küme kullanarak iki değerden birine Filtre Ekle veya Süzgecini Düzenle yeni yayın Sihirbazı kullanılabilir iletişim kutuları ve Publication Properties iletişim kutusu.Aşağıdaki tablo kullanılabilir değerleri özetlenmektedir:

Açıklama

Değer Filtresi ve düzenleme filtresi ekleme

Makale özellikleri değeri

Saklı yordamların değer

Veri bölümleri örtüşen ve abone parametreli bir filtrede başvurulan sütunları güncelleştirebilirsiniz.

Bu satırdan tablo birden fazla abonelik gider

Üst üste

0

Veri bölümleri örtüşen ve abone parametreli bir filtrede başvurulan sütunları güncelleştirilemiyor.

N/A1

Bölüm dışı veri değişiklikleri örtüşen, izin verme

1

Veri bölümleri içinde üst üste ve verileri abonelikleri arasında paylaşılır.Abone parametreli bir filtrede başvurulan sütunları güncelleştirilemiyor.

N/A1

Örtüşmeyen, abonelikler arasında paylaşılan

2

Veri bölümleri içinde üst üste ve bölüm başına tek bir abonelik yoktur.Abone bir parametreli filtre. başvurulan sütunları güncelleştirilemiyor2

Bu satırdan tablo için yalnızca bir abonelik gider

Abonelik örtüşmeyen, tek

3

1 Temel filtre uygulama seçeneği ayarlanırsa, 0, veya 1, veya 2, Filtre Ekle ve Süzgecini Düzenle iletişim kutularının Bu satırdan tablo birden çok abonelikleri için gidecek.

2 Bu seçeneği belirtirseniz, yalnızca olabilir her bölüm için tek bir abonelik veri bu makale.Varolan bir aboneliği, ikinci bir abonelik filtreleme ölçütü yeni abonelik için varolan bir aboneliği aynı bölüme çözümler oluşturulursa, bırakılır.

Önemli notÖnemli

The partition options value must be set according to how data is shared by Subscribers.Örneğin, belirtirseniz, bölüm bölüm başına tek bir abonelik ile örtüşmeyen, ancak veri başka bir Abone tarafında güncelleştirilmiş, Birleştirme Aracısı eşitleme sırasında başarısız olabilir ve sapma durumu oluşabilir.

Uygun bölümü seçeneğini seçme

Örtüşmeyen bölümleri precomputed bölümleri bazı işlevsel kısıtlamaları kabul edilebilir olduğu durumlarda performansı artırmak için birlikte çalışır.Precomputed bölümleri yüklemeleri aboneleri, ancak yavaş karşıya yüklemeler için hızlandırır.Örtüşmeyen bölümleri precomputed bölümleri ile karşıya yükleme maliyetini en aza indirin.Parametreli filtreleri ve kullanılan birleştirmek filtreleri daha karmaşık olduğunda performans yararı örtüşmeyen bölümleri, daha belirgindir.

Aşağıdaki senaryolarda kullanmak için hangi bölüm seçenekleri karar verirken göz önünde bir yayın.

  • Adventure Works Belirli bir posta koduna sahip müşteriler için sorumlu her satış temsilcisi ile bir mobil satış ekibi vardır.Uygulama, bir müşteri bir satış bölgesinden diğerine taşır, böylece müşteri farklı bir satış elemanı için atanan posta kodu güncelleştirilmesini gerektirir.Parametreli filtre üzerinde müşterinin posta kodunu temel alır ve güncelleştirme oturan bir satış kişi bölümünden kaldırır ve satış başka bir kişinin bölümüne ekler.Bu bölüm parametreli bir filtrede başvurulan sütunları güncelleştirme yeteneği ile örtüşen gerektirir.Bu seçenek, esneklik en üst düzeye çıkarır ama yanı sıra örtüşmeyen bölümleri getirmeyebilir.

  • Bir devlet kurumunun her ilçe durumu bölgesel ofisleri tarafından sağlanan verileri vardır.Üst üste verileri; her satır, tablo at dairesi genel müdürlüğü içinde yalnızca bir bölüm dahil, ancak o bölüm birden fazla aynı ilçe ofislere gönderilir.Örtüşmeyen bölüm bölümleri arasında abonelikleri paylaşılan performans geliştirme uygulama gereksinimlerinin karşılanması ederken bölüm örtüşmesini üzerinden sağlayan uygun seçenektir.

  • Örtüşmeyen bölümleri varsa ve yalnızca bir abonelik alır ve bir bölümünde verileri güncelleştirir, daha fazla performans avantajları alırlar.Bu senaryo için satış sistemleri noktası ortaktır ve alan içinde veriler öncelikle Abone tarafında toplanır ve yayımcı için karşıya yüklenen uygulamalar zorlar.Düşünün bir paket bir teslimat uygulamasında tablo: her paketi bir kamyon yüklendiği gibi paketin durumu içinde değişti paket tablo ve değişikliği geri İşletmeleri için çoğaltılmış.Sürücüleri güncelleştirme durumu aynı paket üzerinde iki farklı kamyonlar, bu nedenle paket tablo bölüm başına tek bir abonelik ile örtüşmeyen bir bölümü için iyi bir adaydır.

Örtüşmeyen bölümleri için dikkat edilmesi gereken noktalar

Örtüşmeyen bölümleri kullanırken, aşağıdaki konuları göz önünde bulundurun.

Genel konular

  • yayın precomputed bölümleri kullanmanız gerekir.

  • Bir satır, yalnızca bir bölümüne ait olması gerekir.

  • Makaleler, mantıksal kayıt parçası olamaz.

  • Farklı eşitleme ortaklarıyla desteklenmiyor (Bu özellik kaldırılmıştır).

  • Abone parametreli bir filtrede başvurulan sütunları güncelleştirilemiyor.

  • INSERT bir abone adresindeki bir bölüme ait, silinmez.Ancak, bunu diğer abonelere çoğaltılacaktır değil.

  • Veri Birleştirme Aracısı eklediğinde, üst üste çakışan bölümler ile bazı durumlarda, kimlik aralıklarını düzeltilir.Örtüşmeyen bölümleri ile aralıkları yalnızca ekler sırasında kimlik aralıklarını ayarlamak için izni olan bir kullanıcı tarafından ayarlanabilir abonelik veritabanı.Kullanıcı ya da sahip olmalıdır tablo, ya da üye olmanız sysadmin sabit sunucu rolü db_owner sabit veritabanı rolü veya db_ddladmin sabit veritabanı rolü.

Dikkat edilecek diğer noktalar için bölüm başına tek bir abonelik ile örtüşmeyen bölümleri

Dikkat edilecek diğer noktalar için birleşim filtreleri

  • İçinde bir birleştirmek filtresi olamaz örtüşen bir bölümü içeren bir makale hiyerarşi, görünür bir makale ile örtüşmeyen bir bölümü yukarıda.Başka bir deyişle, alt makale varsa üst makale örtüşmeyen bölümleri kullanmanız gerekir.birleştirmek filtreleri hakkında daha fazla bilgi için bkz: Filtreler katılın.

  • Örtüşmeyen bölüm çocuk olduğu bir birleştirmek filtre olmalıdır birleştirmek benzersiz anahtar özellik küme 1.Daha fazla bilgi için bkz: Filtreler katılın.

  • Makaleyi yalnızca parametreleştirilmiş bir filtre olmalıdır veya birleşim filtresi.Bir parametreli filtre sahip ve üstünün kapatılmasına bir birleştirmek filtresi izin verilir.Parametreleştirilmiş bir filtre olması ve alt verilen bir birleştirmek filtresi izin verilir.Birden fazla olması birleştirmek filtresi da silmeye izin verilmiyor.

  • Yayımcı adresindeki iki tablonuz varsa, bir birleşim filtresi ilişki ve alt tablo ana tablosunda karşılık gelen bir satır içeren satır varsa, INSERT eksik üst satır (satır yükleneceği üst üste çakışan bölümler ile) abone karşıdan yüklenmesini ilişkili satırların oluşturmayacaktır.Örneğin, SalesOrderDetail tablolu hiçbir karşılık gelen satır satır SalesOrderHeader tablo ve eksik satırda yerleştirin SalesOrderHeader, satır için abone karşıdan yüklenir, ancak karşılık gelen satırlar SalesOrderDetail değildir.