sp_addmergefilter (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Menambahkan filter penggabungan baru untuk membuat partisi berdasarkan gabungan dengan tabel lain. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Konvensi sintaks transact-SQL

Sintaks

sp_addmergefilter
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    , [ @filtername = ] N'filtername'
    , [ @join_articlename = ] N'join_articlename'
    , [ @join_filterclause = ] N'join_filterclause'
    [ , [ @join_unique_key = ] join_unique_key ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @filter_type = ] filter_type ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi tempat filter penggabungan ditambahkan. @publication adalah sysname, tanpa default.

[ @article = ] N'article'

Nama artikel tempat filter penggabungan ditambahkan. @article adalah sysname, tanpa default.

[ @filtername = ] N'filtername'

Nama filter. @filtername adalah parameter yang diperlukan. @filtername adalah sysname, tanpa default.

[ @join_articlename = ] N'join_articlename'

Artikel induk tempat artikel turunan, yang ditentukan oleh @article, harus digabungkan menggunakan klausa gabungan yang ditentukan oleh @join_filterclause, untuk menentukan baris dalam artikel anak yang memenuhi kriteria filter filter gabungan. @join_articlename adalah sysname, tanpa default. Artikel harus dalam publikasi yang diberikan oleh @publication.

[ @join_filterclause = ] N'join_filterclause'

Klausa gabungan yang harus digunakan untuk bergabung dengan artikel anak yang ditentukan oleh @articledan artikel induk yang ditentukan oleh @join_article, untuk menentukan baris yang memenuhi syarat filter penggabungan. @join_filterclause adalah nvarchar(1000), tanpa default.

[ @join_unique_key = ] join_unique_key

Menentukan apakah gabungan antara artikel turunan @article dan artikel induk @join_article adalah satu-ke-banyak, satu-ke-satu, banyak-ke-satu, atau banyak-ke-banyak. @join_unique_key int, dengan default 0.

  • 0 menunjukkan gabungan banyak-ke-satu atau banyak-ke-banyak.

  • 1 menunjukkan gabungan satu-ke-satu atau satu-ke-banyak.

Nilai ini adalah 1 ketika kolom gabungan membentuk kunci unik di @join_article, atau jika @join_filterclause berada di antara kunci asing di @article dan kunci primer di @join_article.

Perhatian

Hanya atur parameter ini 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 mungkin terjadi.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Mengakui bahwa tindakan yang diambil oleh prosedur tersimpan ini mungkin membatalkan rekam jepret yang ada. @force_invalidate_snapshot adalah bit, dengan default 0.

  • 0 menentukan bahwa perubahan pada artikel penggabungan tidak menyebabkan rekam jepret tidak valid. Jika prosedur tersimpan mendeteksi bahwa perubahan memang memerlukan rekam jepret baru, kesalahan terjadi dan tidak ada perubahan yang dilakukan.

  • 1 menentukan bahwa perubahan pada artikel penggabungan dapat menyebabkan rekam jepret tidak valid, dan jika ada langganan yang memerlukan rekam jepret baru, memberikan izin agar rekam jepret yang ada ditandai sebagai usang dan rekam jepret baru yang dihasilkan.

[ @force_reinit_subscription = ] force_reinit_subscription

Mengakui bahwa tindakan yang diambil oleh prosedur tersimpan ini mungkin mengharuskan langganan yang ada untuk diinisialisasi ulang. @force_reinit_subscription adalah bit, dengan default 0.

  • 0 menentukan bahwa perubahan pada artikel penggabungan tidak menyebabkan langganan diinisialisasi ulang. Jika prosedur tersimpan mendeteksi bahwa perubahan akan mengharuskan langganan diinisialisasi ulang, kesalahan terjadi dan tidak ada perubahan yang dilakukan.

  • 1 menentukan bahwa perubahan pada artikel penggabungan menyebabkan langganan yang ada diinisialisasi ulang, dan memberikan izin untuk reinisialisasi langganan terjadi.

[ @filter_type = ] filter_type

Menentukan jenis filter yang ditambahkan. @filter_type kecil, dan bisa menjadi salah satu nilai berikut.

Nilai Deskripsi
1 Gabungkan filter saja. Diperlukan untuk mendukung Pelanggan Ringkas SQL Server.
2 Hubungan rekaman logis saja.
3 Baik gabungan filter maupun hubungan rekaman logis.

Untuk informasi selengkapnya, lihat Perubahan Grup pada Baris Terkait dengan Rekaman Logis.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_addmergefilter digunakan dalam replikasi penggabungan.

sp_addmergefilter hanya dapat digunakan dengan artikel tabel. Artikel tampilan tampilan dan terindeks tidak didukung.

Prosedur ini juga dapat digunakan untuk menambahkan hubungan logis antara dua artikel yang mungkin atau mungkin tidak memiliki filter gabungan di antara mereka. @filter_type digunakan untuk menentukan apakah filter penggabungan yang ditambahkan adalah filter gabungan, hubungan logis, atau keduanya.

Untuk menggunakan catatan logis, publikasi dan artikel harus memenuhi beberapa persyaratan. Untuk informasi selengkapnya, lihat Perubahan Grup pada Baris Terkait dengan Rekaman Logis.

Biasanya, opsi ini digunakan untuk artikel yang merupakan referensi kunci asing ke tabel kunci utama yang diterbitkan, dan tabel kunci utama memiliki filter yang ditentukan dalam artikelnya. Subset baris kunci utama digunakan untuk menentukan baris kunci asing yang direplikasi ke Pelanggan.

Anda tidak dapat menambahkan filter gabungan di antara dua artikel yang diterbitkan saat tabel sumber untuk kedua artikel memiliki nama objek tabel yang sama. Dalam kasus seperti itu, bahkan jika kedua tabel dimiliki oleh skema yang berbeda dan memiliki nama artikel yang unik, pembuatan filter gabungan gagal.

Saat filter baris berparameter dan filter gabungan digunakan pada artikel tabel, replikasi menentukan apakah baris termasuk dalam partisi Pelanggan. Ini melakukannya dengan mengevaluasi fungsi pemfilteran atau filter gabungan (menggunakan operator OR ), daripada mengevaluasi persimpangan dua kondisi (menggunakan operator AND ).

Contoh

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.EmployeeID = 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

Izin

Hanya anggota peran server tetap sysadmin atau peran database tetap db_owner yang dapat menjalankan sp_addmergefilter.