Aracılığıyla paylaş


Parametreli satır süzgeçleri

Parameterized filtreler izin farklı bölümlerini farklı aboneleri için birden çok yayın gerek kalmadan oluşturulacak gönderilecek verileri (parametrelendirilmiş filtreler başvuru için önceki sürümleri dinamik filtre olarak SQL Server).Satır, yalnızca alt küme küme küme bölümüdür bir tablo; her satırda bir yayımlanan parametreli filtre oluştururken seçtiğiniz ayarlara bağlı olarak tablo yalnızca bir bölümüne ait olabilir (hangi üreten örtüşmeyen bölümler) veya (, üst üste gelen bölümleri) iki veya daha fazla bölüm.

Örtüşmeyen bölümleri abonelikleri arasında paylaşılabilir veya yalnızca bir abonelik verili bir bölüm alır, bunların sınırlandırılabilir.Bölüm davranışını denetleyen ayarları "Using uygun filtre seçenekleri" Bu konunun ilerisinde açıklanmıştır.Bu ayarları kullanarak parametreleştirilmiş filtre uygulama ve Performans gereksinimlerine göre uyarlayabilirsiniz.Genel olarak, üst üste gelen bölümleri için daha fazla esneklik sağlar ve daha iyi performans için tek bir abonelik çoğaltılan örtüşmeyen bölümleri sağlar.

Parametrelendirilmiş filtreler kullanır tek bir tablo ve genellikle ilgili tablo s filtre genişletmek için birleştirmek filtrelerle birleştirilir.Daha fazla bilgi için bkz:Süzgeçleri katılın..

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

Nasıl parametrelendirilmiş filtreler çalışma

Parametreli satır filtre yayımlanmaya uygun verileri seçmek için bir WHERE yan tümcesini kullanır.(Statik satır filtre ile olduğu gibi) yan tümcesinde bir hazýr bilgi deðeri belirtmek yerine, belirlediğiniz bir veya her ikisi de aşağıdaki sistem işlevleri: SUSER_SNAME() ve HOST_NAME(). Kullanıcı tanımlı işlevler de kullanılabilir, ancak bunlar gerekir SUSER_SNAME() veya HOST_NAME() işlevinin gövdesinde eklemek veya bu sistem işlevlerden birini değerlendirmek (örneğin MyUDF(SUSER_SNAME()).Kullanıcı tanımlı bir işlev SUSER_SNAME() veya HOST_NAME() işlevinin gövdesinde yer alıyorsa, parametre işlevine geçirilemez.

Sistem işlevleri SUSER_SNAME() ve HOST_NAME() çoğaltma birleştirmek için özel değildir, ancak birleştirme kopyalama ile parametreli filtre uygulamak için kullanılırlar:

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

  • HOST_NAME() örneğine bağlanan bilgisayarın adını döndürürSQL Server.Parametreli filtre kullanıldığında, varsayılan olarak Merge Agent'ın çalıştığı bilgisayarın adını döndürür.Çekme abonelikleri için abonenin adını, İtme abonelikleri için dağıtımcı adı'dır.

    Bu işlev dağıtımcı ve abone adını farklı bir değerle geçersiz kılmak mümkündür.Genellikle bu işlev, satış temsilcisinin adını veya satış temsilcisi kodu gibi daha anlamlı değerlere sahip uygulamalar geçersiz kılDaha fazla bilgi için bu konu bölümünde "HOST_NAME() değeri geçersiz kılma" konusuna bakın.

Sistem işlev tarafından döndürülen değeri, belirttiğiniz bir sütuna göre tablo, filtre ve abone için uygun veri yüklenir.Bu karşılaştırma başlatıldığında abonelik (yalnızca ilk anlık görüntü görüntü görüntüyü uygun verileri alır) ve abonelik eşitleme her saat yapılır.Bir bölüm dışına taşınmasını satır yayımcı bir değişiminde neden, varsayılan olarak, satır Abone tarafında silinir (Bu davranışı kullanarak kontrol @ allow_partition_realignment parametre sp_addmergepublication (Transact-SQL)).

Not

Veritabanı Harmanlama karşılaştırmalar için parametrelendirilmiş filtreler yapıldığında, her zaman kullanılır.Örneğin, Veritabanı Harmanlama büyük/küçük durum duyarlı, ancak tablo veya sütun harmanlama büyük/küçük durum, karşılaştırmanın büyük/küçük durum duyarlı olacaktır.

SUSER_SNAME() ile filtre uygulama

Göz önündeÇalışan tabloAdventure Worksörnek veritabanı.Bu tablo, sütun içerirLoginID' etki alanı\login ' formundaki her çalışan için oturum açma içeren . Bu tablo, çalışanların yalnızca kendilerine ilgili verileri almak için filtre uygulamak için bir filtre yan tümce belirtin:

LoginID = SUSER_SNAME()

Örneğin, çalışanlar için 'adventure-works\john5' değerdir.Merge Agent yayımcı için bağlar (Bu durumda 'adventure-works\john5') abonelik oluşturulurken belirtilen oturum açma kullanır.The Merge Agent, daha sonra tablodaki değerleri SUSER_SNAME() tarafından döndürülen değeri karşılaştırır ve 'adventure-works\john5' değerini içeren satırı yalnızca, yüklemelerLoginID sütun.

HOST_NAME() ile filtre uygulama

Göz önündeHumanResources.Employee tablo.Bu varsayalım tablo gibi bir sütun içerenBilgisayarAdı ' name_computertype ' formundaki her çalışanın bilgisayarın adı ile . Bu tablo, çalışanların yalnızca kendilerine ilgili verileri almak için filtre uygulamak için bir filtre yan tümce belirtin:

ComputerName = HOST_NAME()

Örneğin, çalışanlar için değer 'john5_laptop' olabilir., Merge Agent yayımcı için birbirine bağlayan, değerleri HOST_NAME() tarafından döndürülen değeri karşılaştırır, tablo, yalnızca 'john5_laptop' değerini içeren satır yükler veBilgisayarAdı sütun.

Bir filtre işlevlerinde birleştirmek mümkündür.Örneğin, kullanıcıların bilgisayarlarında, oturum açma kullanılıyorsa, bu çalışan veri alma sağlamak isterseniz, filtre yan tümce olabilir:

LoginID = SUSER_SNAME() AND ComputerName = HOST_NAME()

Filtre ile HOST_NAME() HOST_NAME() değeri geçersiz kılma sürece, genellikle yalnızca çekme abonelikleri ile kullanılır.İşlev tarafından döndürülen değeri Merge Agent'ın çalıştığı bilgisayarın adıdır.Çekme abonelikleri her abonelik için farklı değerdir, ancak İtme abonelikleri için değeri (tüm birleştirme dağıtımcı İtme abonelikleri için çalıştırılacak aracıları) aynıdır.

Security noteSecurity Note:

HOST_NAME() işlev değeri geçersiz kılınabilir; bu nedenle veri bölümlerine erişimi denetlemek için HOST_NAME() içeren filtreler kullanmak olanaklı değildir.Bölümler veri erişimi denetlemek için SUSER_SNAME(), HOST_NAME() ile birlikte SUSER_SNAME() kullanın veya statik satır filtrelerini kullanın.

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

Daha önce belirtildiği gibi örneğine bağlanan bilgisayarın adı varsayılan değer olarak HOST_NAME() verirSQL Server.Parametreli filtreleri kullanarak, bir değer sağlayan bir abonelik oluşturduğunuzda, bu değeri geçersiz kılmak için ortaktır.HOST_NAME() işlev, daha sonra bilgisayarın adı yerine belirttiğiniz değeri verir.

Not

HOST_NAME() geçersiz kılar, tüm aramalar için HOST_NAME() işlev, belirttiğiniz değerle döner.Diğer uygulamalar bilgisayar adını döndürmek HOST_NAME() bağlı değil, emin olun.

Göz önündeHumanResources.Employee tablo.Bu tablo, sütun içerirÇalışan kimliği.Bu filtre tablo filtre yan tümce, her çalışan için ilgili verileri alır, böylece 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ğeri, bu çalışan için bir abonelik oluştururken, HOST_NAME() değerini belirtin., Merge Agent yayımcı için birbirine bağlayan, tablodaki değerleri HOST_NAME() tarafından döndürülen değeri karşılaştırır ve yalnızca 280 değeri içeren satır yüklerÇalışan kimliği sütun.

Important noteImportant Note:

The HOST_NAME() işlev döndüren birncharsayısal veri türü, sütun filtre yan tümce, yukarıdaki örnekte olduğu gibi CONVERT kullanmanız gerekir; böylece değeri.Performans nedenleriyle önerilir, siz uygulanmaz parametreli satır filtre yan tümcesi, sütun adları işlevleri gibiCONVERT(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ı kullanmanız önerilir belirtmeCONVERT(nchar,EmployeeID) = HOST_NAME()Sihirbaz ve kullanınsp_changemergearticleEmployeeID = CONVERT(int,HOST_NAME())yayını. bir anlık görüntü oluşturmadan önce için yan değiştirmek için

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:

Bir abonelik için bir yayın parametrelendirilmiş filtreler ile başlatma

Parametreli satır filtrelerini de birleştirme yayımları 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 hale getirilmiş süzgeçleri.

Uygun süzme seçenekleri kullanarak

İki önemli alanı üzerinde parametrelendirilmiş filtreler kullanarak denetiminiz vardır:

  • Filtreler iki yayın ayarları biri tarafından denetlenen birleştirme kopyalama ile nasıl işlenir: bölüm grupları kullanma ve bölümü değişiklikleri tutmak.

  • Nasıl verileri paylaşılan aboneleri, hangi gerekir yansıtılan makale ayarlayarak arasındabölüm seçenekleri.

İçin küme süzme seçenekleri

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

İkibölüm grupları kullanma ve seçenekleri bölümü değişiklikleri tutmak depolayarak ek meta veriler yayın veritabanını. filtre uygulanmış makaleleri içeren yayınlar için eşitleme performansını artırma The use partition groups option provides greater performance improvement through the use of the precomputed partitions feature.Bu seçenek küme içintruemakaleleri yayınınızdaki bağlı, varsayılan bir küme gereksinimlerini.Bu gereksinimler hakkında daha fazla bilgi için bkz: Parametreli süzgeç performans Precomputed bölümleri ile en iyi duruma getirme. Makalelerinizi precomputed bölümleri kullanma gereksinimleri karşılamıyorsabölüm değişiklikleri saklamak seçenektir küme için true.

'Bölüm Seçenekleri' ayarlama

İçin bir değer belirtmenizbölüm seçenekleri özellik süzülmüş veri biçimi göre bir makale oluşturulurken tablo paylaşılmaz aboneleri.Özellik olabilir küme kullanarak dört değerlerden birinesp_addmergearticlesp_changemergearticle , Makale özellikleri iletişim kutusu. özellik olabilir küme kullanarak iki değerden biriniFiltre ekleme ya da Yeni Yayın Sihirbazı ve Publication Properties iletişim kutusu. kullanılabilen Edit Filter iletişim kutuları Aşağıdaki tablo kullanılabilir değerleri özetlenmektedir:

Açıklama

Değer filtresi ve Düzen filtresi ekleme

Makale özellikleri değeri

Saklı yordamlar değer

Veri bölümleri çakışan ve abone parametreli bir filtreye başvuruda sütunları güncelleştirebilirsiniz.

Bu satır tablo birden fazla abonelik gider

Üst üste

0

Veri bölümleri çakışan ve abone parametreli bir filtreye başvuruda sütun güncelleştirilemez.

Yok1

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

1

Bölümler veri üst üste ve veri abonelikleri arasında paylaşılır.Abone parametreli bir filtreye başvuruda sütun güncelleştirilemez.

Yok1

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

2

Bölümler veri üst üste ve her bölümü tek bir abonelik yok.Abone parametreli bir filtre. başvurulan sütun Güncelleştir2

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

Örtüşmeyen, tek bir abonelik

3

10 Veya 1 temel filtre uygulama seçeneği ayarlayın veya 2Add Filter ve Edit Filter iletişim kutuları Bu tablodaki bir satır birden fazla abonelik Gitgörüntüleyecek.

2 Bu seçeneği belirlerseniz, yalnızca olabilir bu makale. veri her bölüm için tek bir abonelik Yeni Abonelik süzgeç ölçütü için varolan aboneliği ile aynı bölüme çözümler ikinci bir abonelik oluşturulur, varolan aboneliğinizi bırakılır.

Important noteImportant Note:

The partition options value must be set according to how data is shared by Subscribers.Örneğin, belirtirseniz, bir bölümü her bölümü tek bir abonelik ile örtüşmeyen, ancak veri başka bir Abone tarafında güncelleştirilmiş, Birleştirme Aracısı eşitlemede başarısız olabilir ve olmayan yakınsama ortaya çıkabilir.

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

Örtüşmeyen bölümler precomputed bölümleri bazı işlev kısıtlamaları kabul edilebilir olduğu durumlarda performansı artırmak için birlikte çalışır.Precomputed bölümleri aboneleri, ancak yavaş yüklemeleri karşıdan yükleme hızlandırır.Örtüşmeyen bölümler precomputed bölümleri ile ilişkili yükleme maliyeti en aza indirin.Parametrelendirilmiş filtreler ve kullanılan birleştirmek filtreleri daha karmaşık olduğunda performans avantajı örtüşmeyen bölümlerinin daha belirgindir.

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

  • Adventure Works Her müşteri için sorumlu satış temsilcisi ile mobil bir satış ekibi, belirli bir posta koduna sahiptir.Müşteri bir satış bölgesi diğerine taşır, böylece farklı bir satış elemanı için atanan müşteri posta kodu güncelleştirilmesi, uygulamanın gerektirir.Parametreli filtre müşterinin posta kodunu temel alır ve güncelleştirme posta kodunu satış bir kişinin bölümünden kaldırır ve satış başka bir kişinin bölüm ekler.Bu sütun parametreli bir filtreye başvuruda güncelleştirme olanağı bölümleri çakışan gerektirir.Bu seçenek, esneklik büyütür ancak örtüşmeyen bölümleri olarak gerçekleştirebilir.

  • Bir devlet kurumu her İl, İlçe, bölgesel ofisleri için sağlanan veri yok.Verileri olmayan üst üste; her satır tablo Aracısı'nın en merkez yalnızca bir bölümü dahil, ancak bu bölüme birden çok aynı ülke ofisleri için gönderilir.Örtüşmeyen bölüm bölümleri arasında abonelik paylaşılan uygulama gereksinimlerinin karşılanması sırasında çakışan bölümler üzerinde bir performans geliştirme sağlayan uygun seçenektir.

  • Örtüşmeyen bölüm varsa ve yalnızca bir abonelik alır ve bir bölümü verileri güncelleştirir, daha fazla performans avantajı gerçekleştirilmiş.Bu senaryo satış sistemleri noktası yaygındır ve alan uygulamalar, verileri öncelikle Abone tarafında toplanan ve yayımcıya karşıya zorla.Göz önünde birPaket tablo teslim uygulama: her pakete bir kamyon yüklendiği gibi paket durumu değiştiğinde paketi tablo, ve değişikliği geri merkez. için Sürücüleri değil güncelleştirme aynı pakette iki farklı kamyonlar üzerinde durumu;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 ile ilgili konuları

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

Genel konuları

  • Yayın precomputed bölümler kullanmanız gerekir.

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

  • Makaleler, mantıksal kayıt olamaz.

  • Farklı eşitleme ortaklarıyla desteklenmiyor (Bu özellik önerilmiyor).

  • Abone parametreli bir filtreye başvuruda sütun güncelleştirilemez.

  • Bir abonelik sırasında bir ekleme bölüm değil, silinmez.Ancak bunun için diğer abonelere çoaltılır değil.

  • Veri Birleştirme Aracısı ekler ile çakışan bölüm bazı durumlarda, kimlik aralıklarını ayarlanır.Bölümler ile örtüşmeyen aralık yalnızca sırasında ekler abonelik veritabanı içinde kimlik aralıklarını ayarlamak için izni olan bir kullanıcı tarafından ayarlanabilir.Kullanıcı ya da sahip olmalıdır tablo, bir üyesi olmanız veyaSistem Yöneticisidb_ddladmin sabit sunucu rolü ve db_owner sabit veritabanı rolünün sabit veritabanı rolü.

Her bölümü tek bir abonelik ile örtüşmeyen bölümleri için ek düşünceleri

birleştirmek filtreler için ek düşünceleri

  • İçinde bir birleştirmek filtresi olamaz çakışan bir bölümü içeren bir makale hiyerarşisini görünür örtüşmeyen bir bölümünü içeren bir makale üzerinde.Diğer bir deyişle, alt makale varsa üst makale örtüşmeyen bölümler kullanmanız gerekir.birleştirmek filtreleri hakkında bilgi için bkz:Süzgeçleri katılın..

  • A birleştirmek filtresi alt öğesi olmalıdır örtüşmeyen bölüm olduğubenzersiz anahtar birleşimi özellik 1 olarak ayarlayın.Daha fazla bilgi için bkz:Süzgeçleri katılın..

  • makale yalnızca parametreli bir süzgeç olmalı ya da birleştirmek filtresi.Parametreli bir filtre olması ve üst olarak verilen bir birleştirmek filtresi izin verilir.Parametreli bir filtre olması ve alt, verilen bir birleştirmek filtresi izin verilmez.Birden fazla olması birleştirmek filtresi da verilmez.

  • Yayımcı konumundaki iki tablo birleştirmek filtre ilişkisi olan ve alt tablo ana tabloda karşılık gelen satır içeren satırlar varsa eksik üst satır, bir ekleme (satırları bölümleri çakışan ile karşıdan yükleneceği) abone karşıdan yüklenmesini ilişkili satırların oluşturmayacaktır.Örneğin,SalesOrderDetail tabloda SalesOrderHeader tablosunda karşılık gelen satır satır bulunur ve eksik satır eklediğiniz SalesOrderHeader, satır için abone yüklenir, ancak değil. SalesOrderDetail karşılık gelen satırları olan