Поделиться через


sp_mergearticlecolumn (Transact-SQL)

Область применения: SQL Server

Выполняет вертикальное секционирование публикации слиянием. Эта хранимая процедура выполняется на издателе в базе данных публикации.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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 ]
[ ; ]

Аргументы

[ @publication = ] N'publication'

Имя публикации. @publication — sysname без значения по умолчанию.

[ @article = ] N'article'

Имя статьи в публикации. @article — sysname без значения по умолчанию.

[ @column = ] N'column'

Определяет столбцы, по которым создается вертикальная секция. @column имеет имя sysname с значением по умолчаниюNULL. Если NULL и @operation заданы, addвсе столбцы в исходной таблице добавляются в статью по умолчанию. @column не может бытьNULL, если для @operation задано значение drop. Чтобы исключить столбцы из статьи, выполните sp_mergearticlecolumn и укажите @column и задайте @operation для drop каждого столбца удаление из указанного @article.

[ @operation = ] N'operation'

Состояние репликации. @operation — nvarchar(4) с значением по умолчаниюadd.

  • add помечает столбец для репликации.
  • drop очищает столбец.

[ @schema_replication = ] N'schema_replication'

Указывает, что изменение схемы распространяется при запуске агент слияния. @schema_replication — nvarchar(5) с значением по умолчаниюfalse.

Поддерживается только false для @schema_replication.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Определяет возможность недействительности моментального снимка. @force_invalidate_snapshot бит с значением по умолчанию0.

  • 0 указывает, что изменения в статье слияния не вызывают недопустимого моментального снимка.

  • 1 указывает, что изменения в статье слияния могут привести к недопустимому моментальному снимку, и если это так, значение 1 дает разрешение на создание нового моментального снимка.

[ @force_reinit_subscription = ] force_reinit_subscription

Включает или отключает возможность повторно инициализации подписки. @force_reinit_subscription бит с значением по умолчанию0.

  • 0 указывает, что изменения в статье слияния не приводят к повторной инициализации подписки.

  • 1 указывает, что изменения в статье слияния могут привести к повторной инициализации подписки, и если это так, значение 1 дает разрешение на повторную инициализацию подписки.

Значения кода возврата

0 (успешно) или 1 (сбой).

Замечания

sp_mergearticlecolumn используется в репликации слиянием.

Столбец удостоверений нельзя удалить из статьи, если используется автоматическое управление диапазоном удостоверений. Дополнительные сведения см. в статье Репликация столбцов идентификаторов.

Если после создания исходного моментального снимка приложение задает новую вертикальную секцию, необходимо сформировать новый моментальный снимок и применить его к каждой подписке. Моментальные снимки применяются к подпискам при выполнении следующего запланированного моментального снимка и агента распространителя или слияния.

Если для обнаружения конфликтов применяется трассировка на уровне строк (по умолчанию), базовая таблица может содержать не более 1024 столбцов, однако столбцы из статьи должны быть отфильтрованы, чтобы было опубликовано не более 246 столбцов. Если применяется трассировка на уровне столбцов, базовая таблица может содержать не более 246 столбцов.

Примеры

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

Разрешения

Могут выполняться только члены предопределенных ролей сервера sysadmin или db_owner предопределенных ролей базы данных.sp_mergearticlecolumn