Parametreli satır süzgeçleri

Parametreli satır filtreleri izin farklı bölümleri farklı aboneleri için birden çok yayınları gerektirmeden oluşturulacak gönderilecek verileri (parametreli filtreleri anılacaktır önceki sürümleri dinamik filtre olarak SQL Server). Bir bölümü, bir tablodaki satırların bir alt kümesidir; zaman yayımlanmış tablodaki her satır bir Parametreli satır filtre oluşturma birine ait olabilir Seçilen ayarlara bağlı olarak bölüm yalnızca (hangi örtüşmeyen bölümleri oluşturur) veya iki veya daha fazla bölümleri (hangi çakışan bölümler oluşturur).

Örtüşmeyen bölümleri abonelikler arasında paylaşılabilir veya belirli bir bölümdeki tek bir abonelik alır böylece sınırlı olabilir. "Kullanma uygun filtreleme seçenekleri" bölümünün davranışını denetleyen ayarları açıklanmıştır Bu konudaki. Bu ayarları kullanarak parametreli filtre uygulama ve performans gereksinimlerine göre uyarlayabilirsiniz. Genel olarak, çakışan bölümler için daha fazla esneklik sağlar ve çoğaltılması için tek bir abonelik örtüşmeyen bölümleri daha iyi performans sağlar.

Parametreli filtreleri, tek bir tabloda kullanılır ve genellikle ilgili tablolara filtre genişletmek için birleşim filtreleri ile birleştirilir. Daha fazla bilgi için, bkz. Filtreler katılın.

Tanımlamak veya Parametreli satır filtresini değiştirmek için bkz: Tanımla ve birleştirme makalesi Parametreli satır filtre Değiştir.

Nasıl parametreli filtre çalışması

Parametreli satır filtre yayımlanmaya uygun verileri seçmek için bir where yan tümcesi kullanır. (Statik satır filtre gibi) bir hazır bilgi değeri yan tümcesinde belirtme yerine, belirlediğiniz biri 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 onlar veya suser_sname() veya host_name() işlev gövdesine eklemek gerekir bu sistem işlevlerden birini değerlendirmek (gibi MyUDF(SUSER_SNAME()). Kullanıcı tanımlı bir işlevin, işlev gövdesinde suser_sname() veya host_name() içeriyorsa, işlev parametreleri geçirilemez.

suser_sname() ve host_name() sistem işlevleri çoğaltma birleştirme özgü değil, ama bunlar parametreli filtre uygulamak için birleştirme çoğaltma tarafından kullanılır:

  • suser_sname() örneğine yapılan bağlantılar için oturum açma bilgilerini döndürür SQL Server. Bir parametreli filtre kullanılan birleştirme Aracısı tarafından yayımcı bağlanmak için kullanılan oturum açma döndürür (abonelik oluşturduğunuzda, bir oturumu belirtin).

  • host_name() örneğine bağlanan bilgisayarın adını döndürür SQL Server. Bir parametreli filtre kullanılan varsayılan olarak Birleştirme Aracısı çalıştığı bilgisayarın adını döndürür. Çekme abonelikleri için abone adı olduğunu; Itme abonelikleri dağıtımcı adı öyle.

    Bu fonksiyon ile abone ya da Dağıtıcı adı dışında bir değer geçersiz kılmak mümkündür. Tipik uygulamalar bu fonksiyon ile bir satıcı veya Satışçı kimliği gibi daha anlamlı bir değer geçersiz kılma Daha fazla bilgi için bkz: Bölüm "host_name() değeri geçersiz kılma" Bu konuda.

Bir sütuna filtre ve uygun veri için abone karşıdan tablosunda belirttiğiniz sistem işlevi tarafından döndürülen değeri karşılaştırılır. Bu karşılaştırma, abonelik başlatıldı (yalnızca uygun veri ilk anlık görüntü içinde bulunur) ve abonelik eşitlenecek her zaman yapılır. Bir bölümü üzerinden taşınan bir satırda değişiklik yayımcı sonuçları varsayılan olarak, Satır Abone tarafında silinir (Bu davranışı kullanarak kontrol @ allow_partition_realignment parametresi veyasp_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 büyük/küçük harf duyarsızdır, ancak tablo veya sütun harmanlama büyük/küçük harf duyarlı karşılaştırma duyarsız olacaktır.

suser_sname() ile filtreleme

Düşünün Tablo de Adventure Worksörnek veritabanı. Bu tablo sütunu içeren LoginID, formdaki her çalışanın giriş içeren 'domain\login'. Bu tablo filtre, böylece çalışanlar yalnızca onları ilgili verileri almak için bir filtre yan tümcesinde belirtin:

LoginID = SUSER_SNAME()

LoginID = SUSER_SNAME()

Örneğin, bir Çalışanlar 'adventure-works\john5' değeridir. Birleştirme Aracısı için yayımcı bağlandığında, (Bu durumda 'adventure-works\john5') abonelik oluşturulurken belirtilen oturum açma kullanır. Birleştirme Aracısı sonra tablo 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 yükler içinde uzun sütun.

host_name() ile filtreleme

Düşünün HumanResources.Employee tablosu. Bu tabloda bulunan sütun gibi varsayalım BilgisayarAdı şeklinde her çalışanın bilgisayar adı ile 'name_computertype'. Bu tablo filtre, böylece çalışanlar yalnızca onları ilgili verileri almak için bir filtre yan tümcesinde belirtin:

ComputerName = HOST_NAME()

ComputerName = HOST_NAME()

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

Filtre fonksiyonları birleştirmek mümkündür. Örneğin, sadece onlar bilgisayarlarında kendi mantık kullanılıyorsa bir çalışanın veri alınan sağlamak istiyorsanız, filtre yan tümcesi olabilir:

LoginID = SUSER_SNAME() AND ComputerName = HOST_NAME()

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. İşlev tarafından döndürülen değeri Birleştirme Aracısı çalıştığı bilgisayarın adıdır. Çekme abonelikler, değeri her abonelik için farklı, ama Itme abonelikleri için değer (tüm birleştirme itme abonelikleri dağıtımcı Çalıştır aracıları) aynıdır.

Güvenlik notuGüvenlik Notu

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

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

Daha önce belirtildiği gibi host_name() varsayılan örneğine bağlanan bilgisayarın adını döndürür SQL Server. Parametreli filtreleri kullanırken bir abonelik oluştururken bir değer sağlayarak bu değeri geçersiz kılmak için yaygındır. Thehost_name () işlev, sonra bilgisayar adı yerine belirttiğiniz değeri döndürür.

[!NOT]

host_name() geçersiz kılmak tüm aramalar thehost_name () işlev için belirlediğiniz değer döndürecektir. Diğer uygulamalar üzerinde bilgisayar adı döndürme host_name() bağlı değil emin olun.

Düşünün HumanResources.Employee tablosu. Bu tablo sütunu içeren EmployeeID. Her çalışan için ilgili verileri alır bu filtrelemek için bir filtre yan tümcesinde belirtin:

EmployeeID = CONVERT(int,HOST_NAME())

Örneğin, çalışan Pamela Ansman-Wolfe 280 bir çalışan kimliği atanmıştır. Çalışan kimliği (bizim örnekte 280) değeri, 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, tablo değerleri host_name() tarafından döndürülen değeri karşılaştırır ve 280'de değeri içeren satır yükler EmployeeID sütun.

Önemli notÖnemli

Thehost_name () işlev verir bir nchardeğeri, böylece bir sayısal veri türü, sütun filtre yan tümcesi ise yukarıdaki örnekte olduğu gibi dönüştürme kullanmalısınız. Performansı düşürmemek için işlev Parametreli satır filtre yan tümceleri, sütun adları gibi uyguladığınız değil öneririz CONVERT(nchar,EmployeeID) = HOST_NAME(). Bunun yerine, örnek gösterilen yaklaşım kullanmanızı öneririz: EmployeeID = CONVERT(int,HOST_NAME()). Bu yan tümcesinde kullanılabilir @ subset_filterclause parametresi sp_addmergearticle, ancak genellikle yeni yayın Sihirbazı'nda kullanılamaz (hangi başarısız bilgisayar adı dönüştürülemez çünkü bunu doğrulamak için filtre yan tümcesi Sihirbazı'nı çalıştırır bir int). Yeni yayın sihirbazını kullanırsanız, belirtme öneririz CONVERT(nchar,EmployeeID) = HOST_NAME()Sihirbazı'nı ve sonra kullanım sp_changemergearticle fıkra değiştirmek için EmployeeID = CONVERT(int,HOST_NAME())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 ile iki bölümden anlık 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

Üzerinde denetim parametreli filtreleri kullanırken elinizde iki anahtar alanları vardır:

  • Bir iki yayın ayarları tarafından denetlenir birleştirme çoğaltma filtreleri nasıl işleneceğini: bölüm grupları kullanmak ve bölüm değişiklikleri korumak.

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

Süzme seçeneklerini ayarlamak için bkz: Parametreli satır filtreleri en iyi duruma getirme.

'Bölüm grupları kullanılsın' ayarını ve 'bölüm değişiklikleri korumak'

Her iki bölüm grupları kullanmak ve bölüm değişiklikleri korumak seçenekleri ek meta veri yayını veritabanında depolayarak yayınlar süzülmüş makale ile eşitleme performansını artırmak. Bölüm grupları kullanmak seçeneği, daha büyük performans artışı, precomputed bölümleri özelliğini kullanarak sağlar. Bu seçeneği ayarlamak trueEğer makaleleri yayınınızdaki gereksinimleri kümesi için uygun varsayılan. 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şılamıyorsa bölüm değişiklikleri korumak seçeneğine ayarlanır true.

'Seçenekleri Bölümü' ayarlama

İçin bir değer belirtmeniz Bölüm seçenekleri göre biçimde içinde süzülen tabloda veri paylaşılan aboneler tarafından bir makale oluştururken özellik. Özelliği kullanılarak dört değerlerden birine ayarlanabilir sp_addmergearticle, sp_changemergearticleve Makale özelliklerini iletişim kutusu. Özelliği kullanarak iki değerlerden birine ayarlanabilir Filtre Ekle veya Filtre Düzenle Yeni Yayın Sihirbazı kullanılabilir iletişim kutuları ve Yayın özelliklerini iletişim kutusu. Aşağıdaki tablo kullanılabilir değerleri özetlenmektedir:

Açıklama

Değer ekleme filtresi ve düzenleme Filtresi

Makale özelliklerini değeri

Saklı yordamları değer

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

Bu tablodan satır birden fazla abonelik gider

Örtüşen

0

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

N/A1

Örtüşen, out-of-bölüm veri değişiklikleri izin verme

1

Bölümler veri değil örtüşüyor ve verileri abonelikleri arasında paylaşılır. Abone parametreli filtre olarak başvurulan sütunları güncelleştirilemiyor.

N/A1

Abonelikler arasında paylaşılan örtüşmeyen,

2

Bölümler veri değil örtüşüyor ve orada tek bir abonelik bölüm başına. Abone parametreli filtre olarak başvurulan sütunları güncelleştirilemiyor.2

Bu tablodan satır yalnızca bir abonelik gider

Abonelik örtüşmeyen, tek

3

1 Temel filtreleme seçeneği ayarlanmışsa 0, veya 1, veya 2, Filtre Ekle ve Edit Filter iletişim kutularını görüntüler Bu tablodan satır birden çok abonelikleri gidecek.

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

Önemli notÖnemli

Bölüm seçenekleri değer veri aboneleri tarafından paylaşılan nasıl göre ayarlanmalıdır. Örneğin, belirtirseniz, bölüm başına tek bir abonelik ile örtüşmeyen bir bölümdür, ancak veriler başka bir Abone tarafında güncelleştirilmiş, Birleştirme Aracısı eşitleme sırasında başarısız olabilir ve yakınsaması oluşabilir.

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

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

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

  • Adventure Worksher satışçı müşteriler için sorumlu mobil satış bir güçle, belirli bir posta kodu vardır. Uygulama, bir müşteri, bir satış bölgesine taşırsa böylece müşteri için farklı bir satış kişi atanan posta kodu güncelleştirilmesini gerektirir. Parametreli filtre müşterinin posta kodunu dayanır ve güncelleştirme ZIP kodu bir satış kişi bölümünden kaldırır ve başka bir satış kişinin bölüm ekler. Bu bölümleri örtüşen parametreli filtre olarak başvurulan sütunları yeteneği gerektirir. Bu seçenek, esneklik büyütür ancak örtüşmeyen bölümleri olarak getirmeyebilir.

  • İş Kurumu Bölge Müdürlükleri her County devlet için sağlanan veri var. Verileri örtüşmediğinden; ama bu bölüm birden fazla aynı ilçe ofisleri gönderilir Ajans'ın karargahında tablodaki her satır tek bir bölüme eklenmiştir. Örtüşmeyen bölüm bölümleri abonelikler arasında paylaşılan uygulama gereksinimlerini tatmin ederken bölümleri örtüşen üzerinde bir performans artışı sağlayan uygun seçenektir.

  • Örtüşmeyen bölümleri varsa ve yalnızca bir abonelik alır ve bir bölümü güncelleştirir, daha fazla performans avantajları gerçekleştirilebilir. Bu senaryo noktası satış sistemleri için ortak ve alan içinde veri öncelikle Abone tarafında toplanan ve yayımcı için karşıya uygulamaları zorlar. Düşünün bir paket bir teslimat uygulamasında tablo: her paketi bir kamyonun yüklenir, paketin durumu içinde değiştirilir paket tablo ve değişikliği geri karargahı için çoğaltılır. Sürücüleri değil güncelleştirmek iki farklı kamyonları, aynı paketi durumu çok paket tablodur bölüm başına tek bir abonelik ile örtüşmeyen bir bölümü için iyi bir aday.

Örtüşmeyen bölümleri hakkında önemli noktalar

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

Genel hususlar

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

  • Bir satırda tek bir bölüme ait olması gerekir.

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

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

  • Abone parametreli filtre olarak başvurulan sütunları güncelleştirilemiyor.

  • Abone ekleme bölümüne ait değilse, silinmez. Ancak, bunu diğer abonelere çoğaltılmaz.

  • Veri Birleştirme Aracısı eklediğinde bölümleri örtüşen ile bazı durumlarda, kimlik aralıklarını ayarlanır. İle örtüşmeyen bölümleri, aralıkların sadece ekler sırasında abone veritabanı kimlik aralıklarını ayarlamak için izni olan bir kullanıcı tarafından ayarlanabilir. Kullanıcı tablonun sahibi, ya bir üyesi olmanız sysadmin sabit sunucu rolü, db_owner sabit veritabanı rolü, ya da db_ddladmin 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ştirme filtreleri

  • Bir birleşim filtre hiyerarşisindeki bir makale ile örtüşen bir bölümü yukarıda bir makale ile örtüşmeyen bir bölüm bulunamaz. Diğer bir deyişle, eğer alt makale üst makale örtüşmeyen bölümleri kullanmanız gerekir. Birleşim filtreleri hakkında daha fazla bilgi için bkz: Filtreler katılın.

  • Örtüşmeyen bölümü bir çocuk olan birleşim filtre olmalıdır birleşim benzersiz anahtar özelliği 1 olarak ayarlayın. Daha fazla bilgi için, bkz. Filtreler katılın.

  • Makaleyi yalnızca tek parametreli filtre veya birleştirme filtre olmalıdır. Birleşim filtre üst varlık ve parametreli filtre sahip izin verilir. Birleşim filtre çocuk olmanın ve parametreli filtre sahip izin verilmez. Birden fazla birleşim filtre sahip de verilmiyor.

  • Yayımcı adresindeki iki tablo birleştirme filtre ilişkisi vardır ve ana tablosunda karşılık gelen satır içeren satırlar alt tablo varsa, eksik üst satır INSERT için abone karşıdan yüklenirken ilişkili satırların oluşturmayacaktır (satır bölümleri örtüşen ile karşıdan yükleneceği). Örneğin, eğer SalesOrderDetail tablo vardır ile hiçbir karşılık gelen satır satır SalesOrderHeader tablo ve eksik satır ekle SalesOrderHeader, satır için abone karşıdan yüklenir, ancak karşılık gelen satırlar SalesOrderDetail değil.

Ayrıca bkz.

Kavramlar

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

Yayımlanmış veri süzme

Birleştirme çoğaltması yayımlanmış veri süzme