sp_mergearticlecolumn (Transact-SQL)
Выполняет вертикальное секционирование публикации слиянием. Эта хранимая процедура выполняется на издателе в базе данных публикации.
Синтаксис
sp_mergearticlecolumn [ @publication = ] 'publication'
, [ @article = ] 'article'
[ , [ @column = ] 'column'
[ , [ @operation = ] 'operation'
[ , [ @schema_replication = ] 'schema_replication' ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
Аргументы
[ @publication =] 'publication'
Имя публикации. Этот аргумент имеет тип sysname и не имеет значения по умолчанию.[ @article =] 'article'
Имя статьи в публикации. Этот аргумент имеет тип sysname и не имеет значения по умолчанию.[ @column =] 'column'
Определяет столбцы, по которым создается вертикальная секция. Этот аргумент имеет тип sysname и значение по умолчанию NULL. Если он равен NULL, а @operation = N'add', по умолчанию в статью добавляются все столбцы исходной таблицы. Аргумент column не может быть равен NULL, если аргумент operation имеет значение drop. Для исключения столбцов из статьи следует выполнить хранимую процедуру sp_mergearticlecolumn, указав аргументы column и @operation = N'drop' для каждого столбца, который следует удалить из указанной статьи article.[ @operation =] 'operation'
Состояние репликации. Этот аргумент имеет тип nvarchar(4) и значение по умолчанию ADD. При значении add столбец отмечается как подлежащий репликации, при значении drop столбец очищается.[ @schema_replication=] 'schema_replication'
Этот аргумент определяет, будут ли распространены изменения схемы при запуске агента слияния. Он имеет тип nvarchar(5) и значение по умолчанию FALSE.Примечание Для аргумента schema_replication поддерживается только значение FALSE.
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
Включает или отключает возможность наличия недействительных моментальных снимков. Этот аргумент имеет тип bit и значение по умолчанию 0.При значении 0 изменения статьи слияния не приводят к недействительности моментального снимка.
При значении 1 изменения статьи слияния могут привести к недействительности моментального снимка; если это происходит, значение 1 позволяет сделать новый моментальный снимок.
[ **@force_reinit_subscription = ]**force_reinit_subscription
Включает или отключает возможность повторной инициализации подписки. Этот аргумент имеет тип bit и значение по умолчанию 0.Если он равен 0, изменения статьи слияния не приведут к повторной инициализации подписки.
При значении 1 изменения статьи слияния могут привести к повторной инициализации подписки; если это происходит, значение 1 позволяет выполнить повторную инициализацию подписки.
Значения кодов возврата
0 (успешное завершение) или 1 (неуспешное завершение)
Замечания
Хранимая процедура sp_mergearticlecolumn используется при репликации слиянием.
Если осуществляется автоматическое управление диапазоном идентификаторов, столбец идентификаторов не может быть сброшен из статьи. Дополнительные сведения см. в разделе Репликация столбцов идентификаторов.
Если после создания исходного моментального снимка приложение задает новую вертикальную секцию, необходимо сформировать новый моментальный снимок и применить его к каждой подписке. Моментальные снимки применяются к подпискам при выполнении следующего запланированного моментального снимка и агента распространителя или слияния.
Если для обнаружения конфликтов применяется трассировка на уровне строк (по умолчанию), базовая таблица может содержать не более 1 024 столбцов, однако столбцы из статьи должны быть отфильтрованы, чтобы было опубликовано не более 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
Разрешения
Хранимую процедуру sp_mergearticlecolumn могут выполнять только члены предопределенной роли сервера sysadmin и члены предопределенной роли db_owner базы данных.
См. также