Tentukan dan Ubah Filter Gabungan Antara Artikel Penggabungan

Berlaku untuk:SQL Server

Topik ini menjelaskan cara menentukan dan memodifikasi filter gabungan antara artikel penggabungan di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Replikasi penggabungan mendukung filter gabungan, yang biasanya digunakan bersama dengan filter berparameter untuk memperluas partisi tabel ke artikel tabel terkait lainnya.

Dalam Topik Ini

Sebelum Anda mulai

Batasan dan Pembatasan

  • Untuk membuat filter gabungan, publikasi harus berisi setidaknya dua tabel terkait. Filter gabungan memperluas filter baris; oleh karena itu Anda harus menentukan filter baris pada satu tabel sebelum Anda dapat memperluas filter dengan gabungan ke tabel lain. Setelah satu filter gabungan ditentukan, Anda dapat memperluas filter gabungan ini dengan filter gabungan lain jika publikasi berisi tabel terkait tambahan.

  • Jika Anda menambahkan, mengubah, atau menghapus filter gabungan setelah langganan ke publikasi telah diinisialisasi, Anda harus membuat rekam jepret baru dan menginisialisasi ulang semua langganan setelah melakukan perubahan. Untuk informasi selengkapnya tentang persyaratan perubahan properti, lihat Mengubah Publikasi dan Properti Artikel.

Rekomendasi

Menggunakan SQL Server Management Studio

Tentukan, ubah, dan hapus filter gabungan pada halaman Filter Baris Tabel dari Panduan Publikasi Baru atau halaman Filter Baris dari kotak dialog Properti Publikasi - <Publikasi> . Untuk informasi selengkapnya tentang menggunakan panduan dan mengakses kotak dialog, lihat Membuat Publikasi dan Menampilkan dan Mengubah Properti Publikasi.

Untuk menentukan filter gabungan

  1. Pada halaman Filter Baris Tabel dari Panduan Publikasi Baru atau halaman Filter Baris dari Properti Publikasi - <Publikasi>, pilih filter baris yang sudah ada atau filter gabungan di panel Tabel Yang Difilter.

  2. Klik Tambahkan, lalu klik Tambahkan Gabungan untuk Memperluas Filter yang Dipilih.

  3. Buat pernyataan gabungan: pilih Gunakan penyusun untuk membuat pernyataan atau Tulis pernyataan bergabung secara manual.

    • Jika Anda memilih untuk menggunakan penyusun, gunakan kolom di kisi (Konjungsi, Kolom tabel terfilter, Operator, dan kolom tabel Gabungan) untuk membuat pernyataan gabungan.

      Setiap kolom dalam kisi berisi kotak kombo drop-down, memungkinkan Anda memilih dua kolom dan operator (=, <>,< =, <, >=, >, dan suka). Hasilnya ditampilkan di area teks Pratinjau . Jika gabungan melibatkan lebih dari satu pasang kolom, pilih sambungan (AND atau OR) dari kolom Konjunsi , lalu masukkan dua kolom lagi dan operator.

    • Jika Anda memilih untuk menulis pernyataan secara manual, tulis pernyataan gabungan di area teks Pernyataan gabungan. Gunakan kotak daftar Kolom tabel yang difilter dan kotak daftar Kolom tabel gabungan untuk menyeret dan meletakkan kolom ke area teks Pernyataan gabungan.

    • Pernyataan gabungan lengkap akan muncul seperti:

      SELECT <published_columns> FROM [Sales].[SalesOrderHeader] INNER JOIN [Sales].[SalesOrderDetail] ON [SalesOrderHeader].[SalesOrderID] = [SalesOrderDetail].[SalesOrderID]  
      

      Klausa JOIN harus menggunakan penamaan dua bagian; penamaan tiga bagian dan penamaan empat bagian tidak didukung.

  4. Tentukan opsi gabungan:

    • Jika kolom tempat Anda bergabung dalam tabel yang difilter (tabel induk) unik, pilih Kunci unik.

      Perhatian

      Memilih opsi ini menunjukkan bahwa hubungan antara tabel anak dan induk dalam filter gabungan adalah satu hingga satu atau satu ke banyak. Hanya pilih opsi ini jika Anda memiliki batasan pada kolom gabungan dalam tabel anak yang menjamin keunikan. Jika opsi diatur dengan tidak benar, non-konvergensi data dapat terjadi.

    • Secara default, proses replikasi penggabungan berubah berdasarkan baris demi baris selama sinkronisasi. Untuk memiliki perubahan terkait dalam baris tabel yang difilter dan tabel gabungan yang diproses sebagai unit, pilih Rekaman logis (Microsoft SQL Server 2005 (9.x) dan versi yang lebih baru saja). Opsi ini hanya tersedia jika persyaratan artikel dan publikasi untuk menggunakan rekaman logis terpenuhi. Untuk informasi selengkapnya, lihat bagian "Pertimbangan untuk Menggunakan Rekaman Logis" di Perubahan Grup ke Baris Terkait dengan Rekaman Logis.

  5. Pilih OK.

  6. Jika Anda berada dalam kotak dialog Properti Publikasi - <Publikasi> , klik OK untuk menyimpan dan menutup kotak dialog.

Untuk mengubah filter gabungan

  1. Pada halaman Filter Baris Tabel dari Panduan Publikasi Baru atau halaman Filter Baris dari Properti Publikasi - <Publikasi>, pilih filter di panel Tabel Yang Difilter, lalu klik Edit.

  2. Dalam kotak dialog Edit Gabung , ubah filter.

  3. Pilih OK.

Untuk menghapus filter gabungan

  1. Pada halaman Filter Baris Tabel dari Panduan Publikasi Baru atau halaman Filter Baris dari Properti Publikasi - <Publikasi>, pilih filter di panel Tabel Yang Difilter, lalu klik Hapus. Jika filter gabungan yang Anda hapus sendiri diperluas oleh gabungan lain, gabungan tersebut juga akan dihapus.

Menggunakan T-SQL

Prosedur ini memperlihatkan filter berparameter pada artikel induk dengan filter gabungan antara artikel ini dan artikel turunan terkait. Filter gabungan dapat ditentukan dan dimodifikasi secara terprogram menggunakan prosedur tersimpan replikasi.

Untuk menentukan filter gabungan untuk memperluas filter artikel ke artikel terkait dalam publikasi gabungan

  1. Tentukan pemfilteran untuk artikel yang digabungkan, yang juga dikenal sebagai artikel induk.

  2. Di Penerbit pada database publikasi, jalankan sp_addmergearticle (Transact-SQL) untuk menentukan satu atau beberapa artikel terkait, yang juga dikenal sebagai artikel turunan, untuk publikasi. Untuk informasi selengkapnya, lihat Menentukan Artikel.

  3. Di Publisher pada database publikasi, jalankan sp_addmergefilter (Transact-SQL). Tentukan @publication, nama unik untuk filter ini untuk @filtername, nama artikel anak yang dibuat di langkah 2 untuk @article, nama artikel induk yang digabungkan untuk @join_articlename, dan salah satu nilai berikut untuk @join_unique_key:

    • 0 - menunjukkan gabungan banyak-ke-satu atau banyak-ke-banyak antara artikel induk dan anak.

    • 1 - menunjukkan gabungan satu-ke-satu atau satu-ke-banyak antara artikel induk dan anak.

    Ini mendefinisikan filter gabungan antara dua artikel.

    Perhatian

    Hanya atur @join_unique_key ke 1 jika Anda memiliki batasan pada kolom gabungan dalam tabel yang mendasar untuk artikel induk yang menjamin keunikan. Jika @join_unique_key diatur ke 1 salah, non-konvergensi data dapat terjadi.

Contoh (Transact-SQL)

Contoh ini menentukan artikel untuk publikasi gabungan, di mana SalesOrderDetail artikel tabel difilter terhadap SalesOrderHeader tabel yang difilter sendiri menggunakan filter baris statis. Untuk informasi selengkapnya, lihat Menentukan dan Mengubah Filter Baris Statis.

DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @table3 AS sysname;
DECLARE @salesschema AS sysname;
DECLARE @hrschema AS sysname;
DECLARE @filterclause AS nvarchar(1000);
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @table1 = N'Employee'; 
SET @table2 = N'SalesOrderHeader'; 
SET @table3 = N'SalesOrderDetail'; 
SET @salesschema = N'Sales';
SET @hrschema = N'HumanResources';
SET @filterclause = N'Employee.LoginID = HOST_NAME()';

-- Add a filtered article for the Employee table.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_object = @table1, 
  @type = N'table', 
  @source_owner = @hrschema,
  @schema_option = 0x0004CF1,
  @description = N'article for the Employee table',
  @subset_filterclause = @filterclause;

-- Add an article for the SalesOrderHeader table that is filtered
-- based on Employee and horizontally filtered.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_object = @table2, 
  @type = N'table', 
  @source_owner = @salesschema, 
  @vertical_partition = N'true',
  @schema_option = 0x0034EF1,
  @description = N'article for the SalesOrderDetail table';

-- Add an article for the SalesOrderDetail table that is filtered
-- based on SaledOrderHeader.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table3, 
  @source_object = @table3, 
  @source_owner = @salesschema,
  @description = 'article for the SalesOrderHeader table', 
  @identityrangemanagementoption = N'auto', 
  @pub_identity_range = 100000, 
  @identity_range = 100, 
  @threshold = 80,
  @schema_option = 0x0004EF1;

-- Add all columns to the SalesOrderHeader article.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Remove the credit card Approval Code column.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @column = N'CreditCardApprovalCode', 
  @operation = N'drop', 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between Employee and SalesOrderHeader.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table2, 
  @filtername = N'SalesOrderHeader_Employee', 
  @join_articlename = @table1, 
  @join_filterclause = N'Employee.BusinessEntityID = SalesOrderHeader.SalesPersonID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table3, 
  @filtername = N'SalesOrderDetail_SalesOrderHeader', 
  @join_articlename = @table2, 
  @join_filterclause = N'SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;
GO

Contoh ini menentukan grup artikel dalam publikasi gabungan tempat artikel difilter dengan serangkaian filter gabungan terhadap Employee tabel yang difilter menggunakan filter baris berparameter pada nilai HOST_NAME di kolom LoginID . Untuk informasi selengkapnya, lihat Menentukan dan Mengubah Filter Baris Berparameter untuk Artikel Penggabungan.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

--Add a new merge publication.
DECLARE @publicationdb AS sysname;
DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @filter AS sysname;
DECLARE @schema_hr AS sysname;
DECLARE @schema_sales AS sysname;

SET @publicationdb = N'AdventureWorks2022';
SET @publication = N'AdvWorksSalesPersonMerge';
SET @table1 = N'Employee';
SET @table2 = N'SalesPerson';
SET @filter = N'SalesPerson_Employee';
SET @schema_hr = N'HumanResources';
SET @schema_sales = N'Sales';

USE [AdventureWorks2022];

-- Enable AdventureWorks2022 for merge replication.
EXEC sp_replicationdboption
  @dbname = @publicationdb,
  @optname = N'merge publish',
  @value = N'true';  

-- Create new merge publication with Subscriber requested snapshot
-- and using the default agent schedule. 
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication of AdventureWorks2022.', 
  @allow_subscriber_initiated_snapshot = N'true',
  @publication_compatibility_level = N'90RTM';

-- Create a new snapshot job for the publication, using the default schedule.
-- Pass credentials at runtime using sqlcmd scripting variables.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = $(login), 
  @job_password = $(password);

-- Add an article for the Employee table, 
-- which is horizontally partitioned using 
-- a parameterized row filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_owner = @schema_hr, 
  @source_object = @table1, 
  @type = N'table', 
  @description = 'contains employee information', 
  @subset_filterclause = N'[LoginID] = HOST_NAME()';

-- Add an article for the SalesPerson table, 
-- which is partitioned based on a join filter.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_owner = @schema_sales, 
  @source_object = @table2, 
  @type = N'table', 
  @description = 'contains salesperson information';

-- Add a join filter between the two articles.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table1, 
  @filtername = @filter, 
  @join_articlename = @table2, 
  @join_filterclause = N'[Employee].[BusinessEntityID] = [SalesPerson].[SalesPersonID]', 
  @join_unique_key = 1, 
  @filter_type = 1;
GO

-- Start the agent job to generate the full snapshot for the publication.
-- The filtered data snapshot is generated automatically the first time 
-- the subscription is synchronized. 
DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesPersonMerge';

EXEC sp_startpublication_snapshot 
  @publication = @publication;
GO

Lihat Juga

Filter Gabungan
Filter Baris Berparameter
Mengubah Properti Publikasi dan Artikel
Filter Data yang Diterbitkan untuk Replikasi Penggabungan
Cara: Menentukan dan Memodifikasi Filter Gabungan Antara Artikel Gabungan (SQL Server Management Studio)
Konsep Prosedur Tersimpan Sistem Replikasi
Tentukan Hubungan Rekaman Logis Antara Artikel Tabel Gabungan
Menentukan dan Mengubah Filter Baris Berparameter untuk Artikel Penggabungan