Tentukan dan Ubah Filter Kolom

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Topik ini menjelaskan cara menentukan dan memodifikasi filter kolom di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL.

Dalam Topik Ini

Sebelum Anda mulai

Batasan dan Pembatasan

  • Beberapa kolom tidak dapat difilter; untuk informasi selengkapnya, lihat Memfilter Data yang Diterbitkan. Jika Anda mengubah filter kolom setelah langganan 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.

Menggunakan SQL Server Management Studio

Tentukan filter kolom pada halaman Artikel wizard Publikasi Baru. Untuk informasi selengkapnya tentang menggunakan Panduan Publikasi Baru, lihat Membuat Publikasi.

Tentukan dan ubah filter kolom pada halaman Artikel dari kotak dialog Properti Publikasi - <Publikasi> . Untuk informasi selengkapnya tentang publikasi dan properti artikel, lihat Menampilkan dan Mengubah Properti Publikasi.

Untuk menentukan filter kolom

  1. Pada halaman Artikel Panduan Publikasi Baru, perluas tabel yang akan difilter di panel Objek untuk diterbitkan .

  2. Kosongkan kotak centang di samping setiap kolom yang ingin Anda filter.

Untuk mengubah pemfilteran kolom

  1. Pada halaman Artikel dari kotak dialog Properti Publikasi - <Publikasi>, perluas tabel yang akan difilter di panel Objek untuk diterbitkan.

  2. Kosongkan kotak centang di samping setiap kolom yang ingin Anda filter, dan pastikan bahwa kotak centang dipilih untuk setiap kolom yang harus disertakan dalam artikel.

  3. Pilih OK.

Menggunakan T-SQL

Saat membuat artikel tabel, Anda dapat menentukan kolom mana yang akan disertakan dalam artikel dan mengubah kolom setelah artikel ditentukan. Anda dapat membuat dan mengubah kolom yang difilter secara terprogram menggunakan prosedur tersimpan replikasi.

Catatan

Prosedur berikut mengasumsikan bahwa tabel yang mendasar tidak berubah. Untuk informasi tentang mereplikasi perubahan bahasa definisi data (DDL) pada tabel yang diterbitkan, lihat Membuat Perubahan Skema pada Database Publikasi.

Untuk menentukan filter kolom untuk artikel yang diterbitkan dalam rekam jepret atau publikasi transaksi

  1. Tentukan artikel yang akan difilter. Untuk informasi selengkapnya, lihat Menentukan Artikel.

  2. Di Publisher pada database publikasi, jalankan sp_articlecolumn. Ini menentukan kolom yang akan disertakan atau dihapus dari artikel.

    • Jika menerbitkan hanya beberapa kolom dari tabel dengan banyak kolom, jalankan sp_articlecolumn sekali untuk setiap kolom yang ditambahkan. Tentukan nama kolom untuk @column dan nilai tambah untuk @operation.

    • Jika menerbitkan sebagian besar kolom dalam tabel dengan banyak kolom, jalankan sp_articlecolumn, tentukan nilai null untuk @column dan nilai tambah untuk @operation untuk menambahkan semua kolom. Kemudian jalankan sp_articlecolumn, sekali untuk setiap kolom yang dikecualikan, menentukan nilai drop untuk @operation dan nama kolom yang dikecualikan untuk @column.

  3. Di Publisher pada database publikasi, jalankan sp_articleview. Tentukan nama publikasi untuk @publication dan nama artikel yang difilter untuk @article. Ini membuat objek sinkronisasi untuk artikel yang difilter.

Untuk mengubah filter kolom agar menyertakan kolom tambahan untuk artikel yang diterbitkan dalam rekam jepret atau publikasi transaksional

  1. Di Publisher pada database publikasi, jalankan sp_articlecolumn sekali untuk setiap kolom yang ditambahkan. Tentukan nama kolom untuk @column dan nilai tambah untuk @operation.

  2. Di Publisher pada database publikasi, jalankan sp_articleview. Tentukan nama publikasi untuk @publication dan nama artikel yang difilter untuk @article. Jika publikasi memiliki langganan yang sudah ada, tentukan nilai 1 untuk @change_active. Ini membuat ulang objek sinkronisasi untuk artikel yang difilter.

  3. Jalankan ulang pekerjaan Agen Rekam Jepret untuk publikasi guna menghasilkan rekam jepret yang diperbarui.

  4. Menginisialisasi ulang langganan. Untuk informasi selengkapnya, lihat Menginisialisasi ulang Langganan.

Untuk mengubah filter kolom guna menghapus kolom untuk artikel yang diterbitkan dalam rekam jepret atau publikasi transaksi

  1. Di Publisher pada database publikasi, jalankan sp_articlecolumn sekali untuk setiap kolom yang dihapus. Tentukan nama kolom untuk @column dan nilai penurunan untuk @operation.

  2. Di Publisher pada database publikasi, jalankan sp_articleview. Tentukan nama publikasi untuk @publication dan nama artikel yang difilter untuk @article. Jika publikasi memiliki langganan yang sudah ada, tentukan nilai 1 untuk @change_active. Ini membuat ulang objek sinkronisasi untuk artikel yang difilter.

  3. Jalankan ulang pekerjaan Agen Rekam Jepret untuk publikasi guna menghasilkan rekam jepret yang diperbarui.

  4. Menginisialisasi ulang langganan. Untuk informasi selengkapnya, lihat Menginisialisasi ulang Langganan.

Untuk menentukan filter kolom untuk artikel yang diterbitkan dalam publikasi gabungan

  1. Tentukan artikel yang akan difilter. Untuk informasi selengkapnya, lihat Menentukan Artikel.

  2. Di Publisher pada database publikasi, jalankan sp_mergearticlecolumn. Ini menentukan kolom yang akan disertakan atau dihapus dari artikel.

    • Jika menerbitkan hanya beberapa kolom dari tabel dengan banyak kolom, jalankan sp_mergearticlecolumn sekali untuk setiap kolom yang ditambahkan. Tentukan nama kolom untuk @column dan nilai tambah untuk @operation.

    • Jika menerbitkan sebagian besar kolom dalam tabel dengan banyak kolom, jalankan sp_mergearticlecolumn, tentukan nilai null untuk @column dan nilai tambahkan untuk @operation untuk menambahkan semua kolom. Kemudian jalankan sp_mergearticlecolumn, sekali untuk setiap kolom yang dikecualikan, menentukan nilai drop untuk @operation dan nama kolom yang dikecualikan untuk @column.

Untuk mengubah filter kolom agar menyertakan kolom tambahan untuk artikel yang diterbitkan dalam publikasi gabungan

  1. Di Publisher pada database publikasi, jalankan sp_mergearticlecolumn sekali untuk setiap kolom yang ditambahkan. Tentukan nama kolom untuk @column, nilai tambah untuk @operation dan nilai 1 untuk @force_invalidate_snapshot dan @force_reinit_subscription.

  2. Jalankan ulang pekerjaan Agen Rekam Jepret untuk publikasi guna menghasilkan rekam jepret yang diperbarui.

  3. Menginisialisasi ulang langganan. Untuk informasi selengkapnya, lihat Menginisialisasi ulang Langganan.

Untuk mengubah filter kolom guna menghapus kolom untuk artikel yang diterbitkan dalam publikasi gabungan

  1. Di Publisher pada database publikasi, jalankan sp_mergearticlecolumn sekali untuk setiap kolom yang dihapus. Tentukan nama kolom untuk @column, nilai penurunan untuk @operation dan nilai 1 untuk @force_invalidate_snapshot dan @force_reinit_subscription.

  2. Jalankan ulang pekerjaan Agen Rekam Jepret untuk publikasi guna menghasilkan rekam jepret yang diperbarui.

  3. Menginisialisasi ulang langganan. Untuk informasi selengkapnya, lihat Menginisialisasi ulang Langganan.

Contoh (Transact-SQL)

Dalam contoh replikasi transaksional ini, DaysToManufacture kolom dihapus dari artikel berdasarkan Product tabel.

DECLARE @publication    AS sysname;
DECLARE @table AS sysname;
DECLARE @filterclause AS nvarchar(500);
DECLARE @filtername AS nvarchar(386);
DECLARE @schemaowner AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @table = N'Product';
SET @filterclause = N'[DiscontinuedDate] IS NULL'; 
SET @filtername = N'filter_out_discontinued';
SET @schemaowner = N'Production';

-- Add a horizontally and vertically filtered article for the Product table.
-- Manually set @schema_option to ensure that the Production schema 
-- is generated at the Subscriber (0x8000000).
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @table, 
    @source_object = @table,
    @source_owner = @schemaowner, 
    @schema_option = 0x80030F3,
    @vertical_partition = N'true', 
    @type = N'logbased',
    @filter_clause = @filterclause;

-- (Optional) Manually call the stored procedure to create the 
-- horizontal filtering stored procedure. Since the type is 
-- 'logbased', this stored procedures is executed automatically.
EXEC sp_articlefilter 
    @publication = @publication, 
    @article = @table, 
    @filter_clause = @filterclause, 
    @filter_name = @filtername;

-- Add all columns to the article.
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table;

-- Remove the DaysToManufacture column from the article
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table, 
    @column = N'DaysToManufacture', 
    @operation = N'drop';

-- (Optional) Manually call the stored procedure to create the 
-- vertical filtering view. Since the type is 'logbased', 
-- this stored procedures is executed automatically.
EXEC sp_articleview 
    @publication = @publication, 
    @article = @table,
    @filter_clause = @filterclause;
GO

Dalam contoh replikasi penggabungan ini, CreditCardApprovalCode kolom dihapus dari artikel berdasarkan SalesOrderHeader tabel.

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

Lihat Juga

Mengubah Properti Publikasi dan Artikel
Filter Data yang Diterbitkan
Filter Data yang Diterbitkan untuk Replikasi Penggabungan