Menentukan dan Memodifikasi Filter Baris Statis

Berlaku untuk:SQL ServerAzure SQL Managed Instance

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

Dalam Topik Ini

Sebelum Anda mulai

Batasan dan Pembatasan

  • Jika Anda menambahkan, memodifikasi, atau menghapus filter baris statis 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.

  • Jika publikasi diaktifkan untuk replikasi transaksional peer-to-peer, tabel tidak dapat difilter.

Rekomendasi

Menggunakan SQL Server Management Studio

Tentukan, ubah, dan hapus filter baris statis 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 baris statis

  1. Pada halaman Filter Baris Tabel dari Panduan Publikasi Baru atau halaman Filter Baris dari kotak dialog Properti Publikasi - <Publikasi> , tindakan yang Anda ambil bergantung pada jenis publikasi:

    • Untuk rekam jepret atau publikasi transaksi, klik Tambahkan.

    • Untuk publikasi gabungan, klik Tambahkan, lalu klik Tambahkan Filter.

  2. Dalam kotak dialog Tambahkan Filter , pilih tabel untuk difilter dari kotak daftar drop-down.

  3. Buat pernyataan filter di area teks Pernyataan filter. Anda bisa mengetik langsung di area teks, dan Anda juga bisa menyeret dan meletakkan kolom dari kotak daftar Kolom .

    Catatan

    Klausa WHERE harus menggunakan penamaan dua bagian; penamaan tiga bagian dan penamaan empat bagian tidak didukung. Jika publikasi berasal dari Oracle Publisher, klausa WHERE harus sesuai dengan sintaks Oracle.

    • Area teks Pernyataan filter menyertakan teks default, yang dalam bentuk:

      SELECT <published_columns> FROM [schema].[tablename] WHERE  
      
    • Teks default tidak dapat diubah; ketik klausa filter setelah kata kunci WHERE menggunakan sintaks SQL standar. Klausa filter lengkap akan muncul seperti:

      SELECT <published_columns> FROM [HumanResources].[Employee] WHERE [LoginID] = 'adventure-works\ranjit0'  
      
    • Filter baris statis dapat menyertakan fungsi yang ditentukan pengguna. Klausa filter lengkap untuk filter baris statis dengan fungsi yang ditentukan pengguna akan muncul seperti:

      SELECT <published_columns> FROM [Sales].[SalesOrderHeader] WHERE MyFunction([Freight]) > 100  
      
  4. Pilih OK.

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

Untuk mengubah filter baris statis

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

  2. Dalam kotak dialog Edit Filter , ubah filter.

  3. Pilih OK.

Untuk menghapus filter baris statis

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

Menggunakan T-SQL

Saat membuat artikel tabel, Anda bisa menentukan klausa WHERE untuk memfilter baris dari artikel. Anda juga dapat mengubah filter baris setelah ditentukan. Filter baris statis dapat dibuat dan dimodifikasi secara terprogram menggunakan prosedur tersimpan replikasi.

Untuk menentukan filter baris statis untuk 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_articlefilter (Transact-SQL). Tentukan nama artikel untuk @article, nama publikasi untuk @publication, nama untuk filter untuk @filter_name, dan klausa pemfilteran untuk @filter_clause (tidak termasuk WHERE).

  3. Jika filter kolom masih harus ditentukan, lihat Menentukan dan Mengubah Filter Kolom. Jika tidak, jalankan sp_articleview (Transact-SQL). Tentukan nama publikasi untuk @publication, nama artikel yang difilter untuk @article, dan klausa filter yang ditentukan di langkah 2 untuk @filter_clause. Ini membuat objek sinkronisasi untuk artikel yang difilter.

Untuk mengubah filter baris statis untuk rekam jepret atau publikasi transaksi

  1. Di Publisher pada database publikasi, jalankan sp_articlefilter (Transact-SQL). Tentukan nama artikel untuk @article, nama publikasi untuk @publication, nama untuk filter baru untuk @filter_name, dan klausa pemfilteran baru untuk @filter_clause (tidak termasuk WHERE). Karena perubahan ini akan membatalkan data dalam langganan yang ada, tentukan nilai 1 untuk @force_reinit_subscription.

  2. Di Publisher pada database publikasi, jalankan sp_articleview (Transact-SQL). Tentukan nama publikasi untuk @publication, nama artikel yang difilter untuk @article, dan klausa filter yang ditentukan di langkah 1 untuk @filter_clause. Ini membuat ulang tampilan yang menentukan artikel yang difilter.

  3. Jalankan ulang pekerjaan Agen Rekam Jepret untuk publikasi guna menghasilkan rekam jepret yang diperbarui. Untuk informasi selengkapnya, lihat Membuat dan Menerapkan Rekam Jepret Awal.

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

Untuk menghapus filter baris statis untuk rekam jepret atau publikasi transaksi

  1. Di Publisher pada database publikasi, jalankan sp_articlefilter (Transact-SQL). Tentukan nama artikel untuk @article, nama publikasi untuk @publication, nilai NULL untuk @filter_name, dan nilai NULL untuk @filter_clause. Karena perubahan ini akan membatalkan data dalam langganan yang ada, tentukan nilai 1 untuk @force_reinit_subscription.

  2. Jalankan ulang pekerjaan Agen Rekam Jepret untuk publikasi guna menghasilkan rekam jepret yang diperbarui. Untuk informasi selengkapnya, lihat Membuat dan Menerapkan Rekam Jepret Awal.

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

Untuk menentukan filter baris statis untuk publikasi gabungan

  1. Di Publisher pada database publikasi, jalankan sp_addmergearticle (Transact-SQL). Tentukan klausa pemfilteran untuk @subset_filterclause (tidak termasuk WHERE). Untuk informasi selengkapnya, lihat Menentukan Artikel.

  2. Jika filter kolom masih harus ditentukan, lihat Menentukan dan Mengubah Filter Kolom.

Untuk mengubah filter baris statis untuk publikasi gabungan

  1. Di Publisher pada database publikasi, jalankan sp_changemergearticle (Transact-SQL). Tentukan nama publikasi untuk @publication, nama artikel yang difilter untuk @article, nilai subset_filterclause untuk @property, dan klausa pemfilteran baru untuk @value (tidak termasuk WHERE). Karena perubahan ini akan membatalkan data dalam langganan yang ada, tentukan nilai 1 untuk @force_reinit_subscription.

  2. Jalankan ulang pekerjaan Agen Rekam Jepret untuk publikasi guna menghasilkan rekam jepret yang diperbarui. Untuk informasi selengkapnya, lihat Membuat dan Menerapkan Rekam Jepret Awal.

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

Contoh (Transact-SQL)

Dalam contoh replikasi transaksional ini, artikel difilter secara horizontal untuk menghapus semua produk yang dihentikan.

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, artikel difilter secara horizontal untuk mengembalikan hanya baris milik tenaga penjual yang ditentukan. Filter gabungan juga digunakan. Untuk informasi selengkapnya, lihat Menentukan dan Memodifikasi Filter Gabungan Antara Artikel Penggabungan.

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

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