sp_articleview (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Membuat tampilan yang menentukan artikel yang diterbitkan saat tabel difilter secara vertikal atau horizontal. Tampilan ini digunakan sebagai sumber skema dan data yang difilter untuk tabel tujuan. Hanya artikel yang tidak berlangganan yang dapat dimodifikasi oleh prosedur tersimpan ini. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Konvensi sintaks transact-SQL

Sintaks

sp_articleview
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @view_name = ] N'view_name' ]
    [ , [ @filter_clause = ] N'filter_clause' ]
    [ , [ @change_active = ] change_active ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @refreshsynctranprocs = ] refreshsynctranprocs ]
    [ , [ @internal = ] internal ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

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

[ @article = ] N'article'

Nama artikel. @article adalah sysname, tanpa default.

[ @view_name = ] N'view_name'

Nama tampilan yang menentukan artikel yang diterbitkan. @view_name adalah nvarchar(386), dengan default NULL.

[ @filter_clause = ] N'filter_clause'

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

[ @change_active = ] change_active

Memungkinkan memodifikasi kolom dalam publikasi yang memiliki langganan. @change_active int, dengan default 0.

  • Jika 0, kolom tidak diubah.
  • Jika 1, tampilan dapat dibuat atau dibuat ulang pada artikel aktif yang memiliki langganan.

[ @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 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 saat menerbitkan dari Penerbit SQL Server.

[ @refreshsynctranprocs = ] refreshsynctranprocs

Menentukan apakah prosedur tersimpan yang digunakan untuk menyinkronkan replikasi dibuat ulang secara otomatis. @refreshsynctranprocs adalah bit, dengan default 1.

  • 1 berarti bahwa prosedur tersimpan dibuat ulang.
  • 0 berarti bahwa prosedur tersimpan tidak dibuat ulang.

[ @internal = ] internal

Diidentifikasi hanya untuk tujuan informasi. Tidak didukung. Kompatibilitas di masa mendatang tidak dijamin.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_articleview membuat tampilan yang menentukan artikel yang diterbitkan dan menyisipkan ID tampilan ini di sync_objid kolom tabel sysarticles (Transact-SQL), dan menyisipkan teks klausa pembatasan di filter_clause kolom. Jika semua kolom direplikasi dan tidak filter_clauseada , sync_objid dalam tabel sysarticles (Transact-SQL) diatur ke ID tabel dasar, dan penggunaannya sp_articleview tidak diperlukan.

Untuk menerbitkan tabel yang difilter secara vertikal (yaitu, untuk memfilter kolom) pertama-tama jalankan sp_addarticle tanpa parameter @sync_object , jalankan sp_articlecolumn (Transact-SQL) sekali agar setiap kolom direplikasi (menentukan filter vertikal), lalu jalankan sp_articleview untuk membuat tampilan yang menentukan artikel yang diterbitkan.

Untuk menerbitkan tabel yang difilter secara horizontal (yaitu, untuk memfilter baris), jalankan sp_addarticle (Transact-SQL) tanpa parameter @filter_name . Jalankan sp_articlefilter (Transact-SQL), menyediakan semua parameter termasuk @filter_clause. Kemudian jalankan sp_articleview, menyediakan semua parameter termasuk @filter_clause yang identik.

Untuk menerbitkan tabel yang difilter secara vertikal dan horizontal, jalankan sp_addarticle (Transact-SQL) tanpa parameter @sync_object atau @filter_name . Jalankan sp_articlecolumn (Transact-SQL) sekali untuk setiap kolom yang akan direplikasi, lalu jalankan sp_articlefilter (Transact-SQL) dan sp_articleview.

Jika artikel sudah memiliki tampilan yang menentukan artikel yang diterbitkan, sp_articleview menghapus tampilan yang sudah ada dan membuat yang baru secara otomatis. Jika tampilan dibuat secara manual (type dalam sysarticles (Transact-SQL) adalah 5), tampilan yang ada tidak dihilangkan.

Jika Anda membuat prosedur tersimpan filter kustom dan tampilan yang menentukan artikel yang diterbitkan secara manual, jangan jalankan sp_articleview. Sebagai gantinya, berikan nilai-nilai ini sebagai parameter @filter_name dan @sync_object untuk sp_addarticle (Transact-SQL), bersama dengan nilai @type yang sesuai.

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_articleview.