sp_mergearticlecolumn (T-SQL)

Berlaku untuk:SQL Server

Mempartisi publikasi gabungan secara vertikal. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Konvensi sintaks transact-SQL

Sintaks

sp_mergearticlecolumn
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @column = ] N'column' ]
    [ , [ @operation = ] N'operation' ]
    [ , [ @schema_replication = ] N'schema_replication' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]

Argumen

[ @publication = ] N'publikasi'

Nama publikasi. @publication adalah sysname, tanpa default.

[ @article = ] N'article'

Nama artikel dalam publikasi. @article adalah sysname, tanpa default.

[ @column = ] N'column'

Mengidentifikasi kolom untuk membuat partisi vertikal. @column adalah sysname, dengan default NULL. Jika NULL dan @operation diatur ke add, semua kolom dalam tabel sumber ditambahkan ke artikel secara default. @column tidak boleh NULL ketika @operation diatur ke drop. Untuk mengecualikan kolom dari artikel, jalankan sp_mergearticlecolumn dan tentukan @column, dan atur @operation ke drop untuk setiap kolom yang akan dihapus dari @article yang ditentukan.

[ @operation = ] N'operation'

Status replikasi. @operation adalah nvarchar(4), dengan default add.

  • add menandai kolom untuk replikasi.
  • drop menghapus kolom.

[ @schema_replication = ] N'schema_replication'

Menentukan bahwa perubahan skema disebarluaskan saat Agen Penggabungan berjalan. @schema_replication adalah nvarchar(5), dengan default false.

Hanya false didukung untuk @schema_replication.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Mengaktifkan atau menonaktifkan kemampuan untuk membatalkan rekam jepret. @force_invalidate_snapshot adalah bit, dengan default 0.

  • 0 menentukan bahwa perubahan pada artikel penggabungan tidak menyebabkan rekam jepret tidak valid.

  • 1 menentukan bahwa perubahan pada artikel penggabungan dapat menyebabkan rekam jepret tidak valid, dan jika demikian, nilai 1 memberikan izin untuk rekam jepret baru terjadi.

[ @force_reinit_subscription = ] force_reinit_subscription

Mengaktifkan atau menonaktifkan kemampuan untuk menginisialisasi ulang langganan. @force_reinit_subscription adalah bit, dengan default 0.

  • 0 menentukan bahwa perubahan pada artikel penggabungan tidak menyebabkan langganan diinisialisasi ulang.

  • 1 menentukan bahwa perubahan pada artikel penggabungan dapat menyebabkan langganan diinisialisasi ulang, dan jika demikian, nilai 1 memberikan izin untuk reinisialisasi langganan terjadi.

Mengembalikan nilai kode

0 (berhasil) atau 1 (kegagalan).

Keterangan

sp_mergearticlecolumn digunakan dalam replikasi penggabungan.

Kolom identitas tidak dapat dihilangkan dari artikel jika manajemen rentang identitas otomatis sedang digunakan. Untuk informasi selengkapnya, lihat Mereplikasi Kolom Identitas.

Jika aplikasi menetapkan partisi vertikal baru setelah rekam jepret awal dibuat, rekam jepret baru harus dibuat dan diterapkan kembali ke setiap langganan. Rekam jepret diterapkan saat rekam jepret dan distribusi terjadwal berikutnya atau agen penggabungan berjalan.

Jika pelacakan baris digunakan untuk deteksi konflik (default), tabel dasar dapat menyertakan maksimum 1.024 kolom, tetapi kolom harus difilter dari artikel sehingga maksimum 246 kolom diterbitkan. Jika pelacakan kolom digunakan, tabel dasar dapat menyertakan maksimum 246 kolom.

Contoh

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

Izin

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