Bagikan melalui


sp_marksubscriptionvalidation (T-SQL)

Berlaku untuk: SQL Server

Menandai transaksi terbuka saat ini menjadi transaksi validasi tingkat langganan untuk pelanggan yang ditentukan. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Konvensi sintaks transact-SQL

Sintaks

sp_marksubscriptionvalidation
    [ @publication = ] N'publication'
    , [ @subscriber = ] N'subscriber'
    , [ @destination_db = ] N'destination_db'
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi. @publication adalah sysname, tanpa default.

[ @subscriber = ] N'pelanggan'

Nama Pelanggan. @subscriber adalah sysname, tanpa default.

[ @destination_db = ] N'destination_db'

Nama database tujuan. @destination_db adalah sysname, tanpa default.

[ @publisher = ] N'publisher'

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

@publisher tidak boleh digunakan untuk publikasi milik Penerbit SQL Server.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_marksubscriptionvalidation digunakan dalam replikasi transaksional.

sp_marksubscriptionvalidation tidak mendukung Pelanggan non-SQL Server.

Untuk Penerbit non-SQL Server, Anda tidak dapat menjalankan sp_marksubscriptionvalidation dari dalam transaksi eksplisit. Ini karena transaksi eksplisit tidak didukung melalui koneksi server tertaut yang digunakan untuk mengakses Publisher.

sp_marksubscriptionvalidation harus digunakan bersama dengan sp_article_validation, menentukan nilai 1 untuk @subscription_level, dan dapat digunakan dengan panggilan lain untuk sp_marksubscriptionvalidation menandai transaksi terbuka saat ini untuk pelanggan lain.

Izin

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

Contoh

Kueri berikut ini dapat diterapkan ke database penerbitan untuk memposting perintah validasi tingkat langganan. Perintah ini diambil oleh Agen Distribusi dari Pelanggan tertentu. Transaksi pertama memvalidasi artikel art1, sementara transaksi kedua memvalidasi art2. Panggilan ke sp_marksubscriptionvalidation dan sp_article_validation dienkapsulasi dalam transaksi. Kami hanya merekomendasikan satu panggilan ke sp_article_validation per transaksi. Ini karena sp_article_validation menyimpan kunci tabel bersama pada tabel sumber selama transaksi. Anda harus menjaga transaksi tetap pendek untuk memaksimalkan konkurensi.

BEGIN TRANSACTION;

EXEC sp_marksubscriptionvalidation @publication = 'pub1',
    @subscriber = 'Sub',
    @destination_db = 'SubDB';

EXEC sp_marksubscriptionvalidation @publication = 'pub1',
    @subscriber = 'Sub2',
    @destination_db = 'SubDB';

EXEC sp_article_validation @publication = 'pub1',
    @article = 'art1',
    @rowcount_only = 0,
    @full_or_fast = 0,
    @shutdown_agent = 0,
    @subscription_level = 1;

COMMIT TRANSACTION;

BEGIN TRANSACTION;

EXEC sp_marksubscriptionvalidation @publication = 'pub1',
    @subscriber = 'Sub',
    @destination_db = 'SubDB';

EXEC sp_marksubscriptionvalidation @publication = 'pub1',
    @subscriber = 'Sub2',
    @destination_db = 'SubDB';

EXEC sp_article_validation @publication = 'pub1',
    @article = 'art2',
    @rowcount_only = 0,
    @full_or_fast = 0,
    @shutdown_agent = 0,
    @subscription_level = 1;

COMMIT TRANSACTION;