sp_articlefilter (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Memfilter data yang diterbitkan berdasarkan artikel tabel. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Konvensi sintaks transact-SQL

Sintaks

sp_articlefilter
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @filter_name = ] N'filter_name' ]
    [ , [ @filter_clause = ] N'filter_clause' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi yang berisi artikel. @publication adalah sysname, tanpa default.

[ @article = ] N'article'

Nama artikel. @article adalah sysname, tanpa default.

[ @filter_name = ] N'filter_name'

Nama prosedur tersimpan filter yang akan dibuat dari @filter_name. @filter_name adalah nvarchar(517), dengan default NULL. Anda harus menentukan nama unik untuk filter artikel.

[ @filter_clause = ] N'filter_clause'

Klausa pembatasan (WHERE) yang menentukan filter horizontal. Saat memasukkan klausul pembatasan, hilangkan kata kunci WHERE. @filter_clause adalah nvarchar(max), dengan default NULL.

[ @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 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 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 tidak menyebabkan kebutuhan 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 menyebabkan langganan yang ada diinisialisasi ulang, dan memberikan izin untuk reinitialisasi langganan terjadi.

[ @publisher = ] N'publisher'

Menentukan Penerbit Non-SQL Server. @publisher adalah sysname, dengan default NULL.

@publisher tidak boleh digunakan dengan Penerbit SQL Server.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_articlefilter digunakan dalam replikasi rekam jepret dan replikasi transaksional.

Menjalankan sp_articlefilter artikel dengan langganan yang sudah ada mengharuskan langganan tersebut diinisialisasi ulang.

sp_articlefilter membuat filter, menyisipkan ID prosedur tersimpan filter di filter kolom tabel sysarticles (Transact-SQL), lalu menyisipkan teks klausa pembatasan di filter_clause kolom.

Untuk membuat artikel dengan filter horizontal, jalankan sp_addarticle (Transact-SQL) tanpa parameter @filter_name . Jalankan , menyediakan semua parameter termasuk @filter_clause, lalu jalankan sp_articlefiltersp_articleview (Transact-SQL), menyediakan semua parameter termasuk @filter_clause yang identik. Jika filter sudah ada dan jika type di sysarticles adalah 1 (artikel berbasis log), filter sebelumnya dihapus dan filter baru dibuat.

Jika @filter_name dan @filter_clause tidak disediakan, filter sebelumnya akan dihapus dan ID filter diatur ke 0.

Contoh

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

Izin

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