Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
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 untuk perubahan properti, lihat Mengubah Properti Publikasi dan Artikel.
Rekomendasi
- Filter gabungan dapat dibuat secara manual untuk sekumpulan tabel, atau replikasi dapat menghasilkan filter secara otomatis berdasarkan hubungan antara kunci asing dan kunci utama yang ditentukan pada tabel. Untuk informasi selengkapnya tentang membuat sekumpulan filter gabungan secara otomatis, lihat Secara Otomatis Membuat Sekumpulan Filter Gabungan Antara Artikel Gabungan (SQL Server Management Studio).
Menggunakan SQL Server Management Studio
Tentukan, ubah, dan hapus filter gabungan pada halaman Filter Table Rows di Wizard Publikasi Baru atau halaman Filter Rows pada kotak dialog Publication Properties - <Publication>. Untuk informasi selengkapnya tentang menggunakan panduan dan mengakses kotak dialog, lihat Membuat Publikasi dan Menampilkan dan Mengubah Properti Publikasi.
Untuk menentukan filter gabungan
Pada halaman Filter Baris Tabel di Wizard Publikasi Baru atau halaman Filter Baris di Properti Publikasi - <Publikasi>, pilih filter baris yang ada atau filter join di panel Tabel yang Difilter.
Klik Tambahkan, lalu klik Tambahkan Gabungan untuk Memperluas Filter yang Dipilih.
Buat pernyataan gabungan: pilih Gunakan penyusun untuk membuat pernyataan atau Tulis pernyataan bergabung secara manual.
Jika Anda memilih untuk menggunakan builder, gunakan kolom di grid (Conjunction, Filtered table column, Operator, dan Joined table column) untuk membuat pernyataan join.
Setiap kolom dalam grid berisi kotak kombinasi daftar dropdown, memungkinkan Anda memilih dua kolom dan satu operator (=, <>,< =, <>=, >, dan sejenis). 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 statemen secara manual, tulis statemen join di area teks Statemen join. Gunakan kotak daftar Kolom tabel yang difilter dan kotak daftar Kolom tabel tergabung untuk menyeret dan meletakkan kolom ke area teks Pernyataan Join.
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.
Tentukan opsi penggabungan:
Jika kolom tempat Anda bergabung dalam tabel yang difilter (tabel induk) unik, pilih Kunci unik.
Perhatian
Memilih opsi ini menandakan bahwa hubungan antara tabel anak dan tabel induk dalam filter join adalah satu-ke-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 "Hal-Hal yang Perlu Dipertimbangkan saat Menggunakan Rekaman Logis" di Mengelompokkan Perubahan pada Baris Terkait dengan Rekaman Logis.
Pilih OK.
Jika Anda berada dalam kotak dialog Properti Publikasi - <Publikasi> , klik OK untuk menyimpan dan menutup kotak dialog.
Untuk mengubah filter gabungan
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.
Dalam kotak dialog Edit Gabung , ubah filter.
Pilih OK.
Untuk menghapus filter gabungan
- 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 join dapat didefinisikan dan dimodifikasi secara terprogram menggunakan prosedur tersimpan replikasi.
Untuk menentukan filter gabungan untuk memperluas filter artikel ke artikel terkait dalam publikasi gabungan
Tentukan pemfilteran untuk artikel yang digabungkan, yang juga dikenal sebagai artikel induk.
Untuk artikel yang difilter menggunakan filter baris berparameter, lihat Menentukan dan Mengubah Filter Baris Berparameter untuk Artikel Penggabungan.
Untuk artikel yang difilter menggunakan filter baris statis, lihat Menentukan dan Mengubah Filter Baris Statis.
Pada Publisher di database publikasi, jalankan sp_addmergearticle (Transact-SQL) untuk mendefinisikan satu atau beberapa artikel terkait, yang juga dikenal sebagai artikel anak, untuk publikasi. Untuk informasi selengkapnya, lihat Menentukan Artikel.
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 penggabungan banyak-ke-satu atau banyak-ke-banyak antara artikel induk dan artikel anak.
1 - menunjukkan penggabungan satu ke satu atau satu ke banyak antara artikel induk dan artikel anak.
Ini mendefinisikan filter gabungan antara dua artikel.
Perhatian
Hanya setel
@join_unique_keyke 1 jika Anda memiliki batasan pada kolom penggabung di tabel yang mendasari artikel induk yang menjamin keunikan. Jika@join_unique_keydiatur ke 1 salah, non-konvergensi data dapat terjadi.
Contoh (Transact-SQL)
Contoh ini mendefinisikan artikel untuk publikasi merge, di mana artikel tabel SalesOrderDetail difilter berdasarkan tabel SalesOrderHeader, yang sendiri difilter 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
Konten terkait
- Filter Gabungan
- Filter Berparameter - Filter Baris Berparameter
- Mengubah Properti Publikasi dan Artikel
- Menyaring data yang dipublikasikan untuk replikasi gabungan
- Cara Menetapkan dan Mengubah Filter Join antarartikel Merge (SQL Server Management Studio)
- Konsep Prosedur Tersimpan pada Sistem Replikasi
- Tentukan Hubungan Catatan Logis antara Artikel pada Tabel Penggabungan
- Menentukan dan Mengubah Filter Baris Berparameter untuk Artikel Penggabungan