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


sp_changemergearticle (Transact-SQL)

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

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

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

Синтаксис

sp_changemergearticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]

Аргументы

[ @publication = ] N'publication'

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

[ @article = ] N'article'

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

[ @property = ] N'property'

Свойство, которое нужно изменить для данной статьи и публикации. @property является sysname и может быть одним из значений, перечисленных в следующей таблице.

[ @value = ] N'value'

Новое значение заданного свойства. @value является nvarchar(2000) и может быть одним из значений, перечисленных в следующей таблице.

Эта таблица описывает свойства статей и значения этих свойств.

Свойство Значения Description
allow_interactive_resolver true Разрешает использование для статьи интерактивного арбитра конфликтов.
false Запрещает использование для статьи интерактивного сопоставителя.
article_resolver Пользовательский сопоставитель для статьи. Применяется только к статье таблицы.
check_permissions (растровое изображение) 0x00 Разрешения на уровне таблицы не проверяются.
0x10 Разрешения уровня таблицы проверяются на издателе, прежде чем к издателю применяются выполненные на подписчике инструкции INSERT.
0x20 Разрешения уровня таблицы проверяются на издателе, прежде чем к издателю применяются выполненные на подписчике инструкции UPDATE.
0x40 Разрешения уровня таблицы проверяются на издателе, прежде чем к издателю применяются выполненные на подписчике инструкции DELETE.
column_tracking true Включает трассировку уровня столбца. Применяется только к статье таблицы.

Примечание. Отслеживание уровня столбцов нельзя использовать при публикации таблиц с более чем 246 столбцами.
false Выключает трассировку уровня столбца и оставляет обнаружение конфликтов уровня строки. Применяется только к статье таблицы.
compensate_for_errors true Выполняется компенсация при возникновении ошибок синхронизации. Дополнительные сведения см. в sp_addmergearticle.
false Компенсирующие действия не выполняются, что является поведением по умолчанию. Дополнительные сведения см. в sp_addmergearticle.

Важно. Хотя данные в затронутых строках могут оказаться неконвергентными, как только вы будете устранять любые ошибки, изменения могут применяться и конвергентировать данные. Если исходная таблица для статьи уже опубликована в другой публикации, значение compensate_for_errors должно быть одинаковым для обеих статей.
creation_script Путь и имя необязательного скрипта схем статей, используемого для создания статьи в базе данных подписки.
delete_tracking true Выполняется репликация инструкций DELETE, что является значением по умолчанию.
false Инструкции DELETE не реплицируются.

Важно: установка delete_tracking результатов false неконвергенции, а удаленные строки должны быть удалены вручную.
description Описание статьи.
destination_owner Имя владельца объекта в базе данных подписки, если не dbo.
identity_range bigint , указывающий размер диапазона, используемый при назначении новых значений удостоверений, если в статье задано identityrangemanagementoption auto значение или auto_identity_range задано значение true. Применяется только к статье таблицы. Дополнительные сведения см. в разделе "Репликация слиянием" столбцов реплицируемых удостоверений.
identityrangemanagementoption manual Запрещает автоматическое управление диапазонами идентификаторов. Помечает столбцы идентификаторов как NOT FOR REPLICATION, чтобы разрешить ручное управление диапазонами идентификаторов. Дополнительные сведения см. в статье Репликация столбцов идентификаторов.
none Запрещает какое бы то ни было управление диапазонами идентификаторов.
logical_record_level_conflict_detection true Обнаружение конфликтов производится при внесении изменений в любое место логической записи. Требуется, чтобы logical_record_level_conflict_resolution для этого задано trueзначение .
false Обнаружение конфликтов по умолчанию используется в соответствии с заданным параметром column_tracking.
logical_record_level_conflict_resolution true Выигравшая логическая запись целиком перезаписывает проигравшую.
false Выигрышные строки не ограничиваются логическими записями.
partition_options 0 Фильтрация для статьи является статической или не дает уникального подмножества данных для каждой секции, то есть "перекрывающейся" секции.
1 Разделы перекрываются, и обновления DML, сделанные на подписчике, не могут изменить секцию, к которой принадлежит строка.
2 Фильтрация для статьи дает неперекрывающиеся секции, но несколько подписчиков могут получить одну и ту же секцию.
3 Фильтрация для статьи дает неперекрывающиеся секции, уникальные для каждой из подписок.

Примечание. Если указать значение 3 для partition_options, в этой статье может быть только одна подписка для каждой секции данных. Если создается вторая подписка, в которой критерий фильтрации новой подписки разрешается в ту же секцию, что и существующая подписка, удаляется существующая подписка.
pre_creation_command none Если таблица на подписчике уже существует, не выполняется никаких действий.
delete Выполняет удаление, используя предложение WHERE, указанное в фильтре подмножества.
drop Удаляет таблицу перед ее повторным созданием.
truncate Усекает целевую таблицу.
processing_order Int , указывающий порядок обработки статей в публикации слиянием.
pub_identity_range bigint , указывающий размер диапазона, выделенный подписчику с подпиской сервера, если в статье identityrangemanagementoption задано auto значение или auto_identity_range задано trueзначение . Этот диапазон идентификаторов резервируется переиздающему подписчику для выделения собственным подписчикам. Применяется только к статье таблицы. Дополнительные сведения см. в разделе "Репликация слиянием" столбцов реплицируемых удостоверений.
published_in_tran_pub true Статья также опубликована в публикации транзакций.
false Статья также не публикуется в публикации транзакций.
resolver_info Используется для указания дополнительных сведений, необходимых пользовательскому сопоставителю. Для некоторых средств разрешения Майкрософт требуется столбец, предоставленный в качестве входных данных для сопоставителя. resolver_info имеет значение nvarchar(255) с значением по умолчанию NULL. Дополнительные сведения см. в разделе "Расширенный конфликт репликации слиянием" — com-разрешения.
schema_option (растровое изображение) Дополнительные сведения см. в разделе с примечаниями.
0x00 Отключает скрипты агент моментальных снимков и использует приведенный в creation_scriptней скрипт.
0x01 Создает скрипт создания объекта (CREATE TABLE, CREATE PROCEDURE и т. д.).
0x10 Создает соответствующий кластеризованный индекс.
0x20 Преобразует определяемые пользователем типы данных в базовые типы данных подписчика. Этот параметр нельзя использовать при наличии ограничения CHECK или DEFAULT для определяемого пользователем типа (UDT), если столбец определяемого пользователем типа является частью первичного ключа или если вычисляемый столбец ссылается на столбец UDT.
0x40 Создает соответствующие некластеризованные индексы.
0x80 Включает объявленную ссылочную целостность по первичным ключам.
0x100 Реплицирует пользовательские триггеры для статьи таблицы, если заданы.
0x200 Реплицирует ограничения FOREIGN KEY. Если указанная таблица не является частью публикации, все ограничения FOREIGN KEY для опубликованной таблицы не реплицируются.
0x400 Реплицирует ограничения CHECK.
0x800 Реплицирует значения по умолчанию.
0x1000 Реплицирует параметры сортировки на уровне столбцов.
0x2000 Реплицирует расширенные свойства, связанные с исходным объектом опубликованной статьи.
0x4000 Реплицирует уникальные ключи для статьи таблицы, если они определены.
0x8000 Создает инструкции ALTER TABLE при включении в сценарий ограничений.
0x10000 Реплицирует ограничения CHECK как NOT FOR REPLICATION, чтобы ограничения не применялись во время синхронизации.
0x20000 Реплицирует ограничения FOREIGN KEY как NOT FOR REPLICATION, чтобы ограничения не применялись во время синхронизации.
0x40000 Реплицирует файловые группы, связанные с секционированной таблицей или индексом.
0x80000 Реплицирует схему секционирования для секционированной таблицы.
0x100000 Реплицирует схему секционирования для секционированного индекса.
0x200000 Реплицирует статистику таблицы.
0x400000 Реплицирует привязки к значениям по умолчанию.
0x800000 Реплицирует привязки к правилам.
0x1000000 Реплицирует полнотекстовый индекс.
0x2000000 Коллекции схем XML, привязанные к xml-столбцам , не реплицируются.
0x4000000 Реплицирует индексы в xml-столбцах .
0x8000000 Создает все схемы, отсутствующие в настоящий момент на подписчике.
0x10000000 Преобразует xml-столбцы в ntext на подписчике.
0x20000000 Преобразует типы данных больших объектов (nvarchar(max), varchar(max)и varbinary(max)), которые были введены в SQL Server 2005 (9.x) в типы данных, поддерживаемые в SQL Server 2000 (8.x).
0x40000000 Реплицировать разрешения.
0x80000000 Попытайтесь удалить зависимости на объекты, которые не являются частью публикации.
0x100000000 Используйте этот параметр для репликации атрибута FILESTREAM, если он указан в столбцах varbinary(max). Не указывайте этот параметр, если вы реплицируете таблицы в подписчики SQL Server 2005 (9.x). Репликация таблиц с столбцами FILESTREAM в подписчики SQL Server 2000 (8.x) не поддерживается независимо от того, как задан этот параметр схемы. См. соответствующий параметр 0x800000000.
0x200000000 Преобразует типы данных даты и времени (date, time, datetimeoffset и datetime2), представленные в SQL Server 2008 (10.0.x), в типы данных, поддерживаемые в более ранних версиях SQL Server.
0x400000000 Проводит репликацию параметра сжатия для данных и индексов. Дополнительные сведения см. в разделе Сжатие данных.
0x800000000 Задайте этот параметр для сохранения данных атрибута FILESTREAM в его файловой группе на подписчике. Если этот параметр не задан, данные FILESTREAM хранятся в файловой группе по умолчанию. Репликация не создает файловые группы; Таким образом, если этот параметр задан, необходимо создать файловую группу перед применением моментального снимка на подписчике. Дополнительные сведения о создании объектов перед применением моментального снимка см. в разделе "Выполнение скриптов до и после применения моментального снимка".

См. соответствующий параметр 0x100000000.
0x1000000000 Преобразует определяемые пользователем типы среды CLR (UDT) в varbinary(max), чтобы столбцы типа UDT можно реплицировать на подписчиков, работающих под управлением SQL Server 2005 (9.x).
0x2000000000 Преобразует тип данных hierarchyid в varbinary(max), чтобы столбцы иерархии типов можно реплицировать в подписчиков, работающих под управлением SQL Server 2005 (9.x). Дополнительные сведения об использовании столбцов hierarchyid в реплицированных таблицах см . в справочнике по методу типа данных hierarchyid.
0x4000000000 Проводит репликацию всех фильтруемых индексов для таблицы. Дополнительные сведения о фильтруемых индексах см. в статье Создание фильтруемых индексов.
0x8000000000 Преобразует типы данных geography и geometry в varbinary(max), чтобы столбцы этих типов можно реплицировать в подписчиков, работающих под управлением SQL Server 2005 (9.x).
0x10000000000 Реплицирует индексы по столбцам типа geography и geometry.
NULL Система автоматически создает допустимый параметр схемы для статьи.
status active Скрипт начальной обработки для публикации таблицы запущен.
unsynced Скрипт начальной обработки для публикации таблицы будет запущен при следующем запуске агента моментальных снимков.
stream_blob_columns true Используется оптимизация потока данных при репликации столбцов больших двоичных объектов. Однако при этом некоторые функции репликации слиянием, например логические записи, могут помешать использованию оптимизации потока. stream_blob_columns имеет значение true, если параметр FILESTREAM включен. Это позволяет оптимально выполнять репликацию данных FILESTREAM и уменьшить использование памяти. Чтобы принудительно использовать потоковую передачу BLOB-объектов, задайте stream_blob_columns значение false.

Важно. Включение этой оптимизации памяти может повредить производительность агент слияния во время синхронизации. Этот параметр должен использоваться только при репликации столбцов, содержащих мегабайты данных.
false Оптимизация не используется при репликации столбцов больших двоичных объектов.
subscriber_upload_options 0 Нет ограничений для обновлений, выполняемых на подписчике с помощью клиентской подписки. Все изменения выгружаются на издатель. Изменение этого свойства может потребовать повторной инициализации существующих подписчиков.
1 Изменения разрешены на подписчике с клиентской подпиской, но они не передаются издателю.
2 Изменения не допускаются на подписчике с клиентской подпиской.
subset_filterclause Предложение WHERE задает горизонтальную фильтрацию. Применяется только к статье таблицы.

Важно. По соображениям производительности рекомендуется не применять функции к именам столбцов в предложениях фильтра строк параметризованной строки, например LEFT([MyColumn]) = SUSER_SNAME(). Если вы используете HOST_NAME в предложении фильтра и переопределяете значение HOST_NAME , может потребоваться преобразовать типы данных с помощью CONVERT. Дополнительные сведения о рекомендациях по этому делу см. в разделе "Переопределение значения HOST_NAME() в параметризованных фильтрах — параметризованные фильтры строк.
threshold Процентное значение, используемое для подписчиков под управлением SQL Server Compact или более ранних версий SQL Server. thresholdопределяет, когда агент слияния назначает новый диапазон удостоверений. Если превышен указанный процент использованных значений, агент слияния выделяет новый диапазон идентификаторов. Используется, если identityrangemanagementoption auto задано значение или auto_identity_range имеет trueзначение . Применяется только к статье таблицы. Дополнительные сведения см. в разделе "Репликация слиянием" столбцов реплицируемых удостоверений.
verify_resolver_signature 1 Цифровая подпись пользовательского сопоставителя проверяется, является ли она из доверенного источника.
0 Цифровая подпись пользовательского сопоставителя не проверяется, является ли она из доверенного источника.
NULL (по умолчанию) Возвращает список поддерживаемых значений для @property.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Подтверждает, что действие, выполненное этой хранимой процедурой, может сделать недействительным существующий моментальный снимок. @force_invalidate_snapshot бит с значением по умолчанию0.

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

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

См. раздел "Примечания " для свойств, которые при изменении требуют создания нового моментального снимка.

[ @force_reinit_subscription = ] force_reinit_subscription

Подтверждает, что действие, выполняемое данной хранимой процедурой, может сделать необходимой повторную инициализацию существующих подписок. @force_reinit_subscription бит с значением по умолчанию0.

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

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

В разделе "Примечания " описаны свойства, которые при изменении требуют повторной инициализации всех существующих подписок.

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

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

Замечания

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

Так как sp_changemergearticle используется для изменения свойств статьи, которые изначально были указаны с помощью sp_addmergearticle, см . sp_addmergearticle дополнительные сведения об этих свойствах.

Для изменения следующих свойств требуется создать новый моментальный снимок, и необходимо указать значение 1 параметра @force_invalidate_snapshot :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • schema_options
  • subset_filterclause

Для изменения следующих свойств требуется повторно инициализировать существующие подписки, и необходимо указать значение 1 параметра @force_reinit_subscription :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • identityrangemanagementoption
  • subscriber_upload_options
  • subset_filterclause
  • creation_script
  • schema_option
  • logical_record_level_conflict_detection
  • logical_record_level_conflict_resolution

При указании значения для метаданных 3 partition_optionsудаляются всякий раз, когда выполняется агент слияния, а секционированные моментальные снимки истекают быстрее. При использовании этого параметра следует разрешить запрошенный подписчиком секционированный снимок. Дополнительные сведения см. в статье Создание моментального снимка для публикации слиянием с параметризованными фильтрами.

При задании column_tracking свойства, если таблица уже опубликована в других публикациях слиянием, отслеживание столбцов должно совпадать со значением, используемым существующими статьями на основе этой таблицы. Этот параметр применим только для статей таблиц.

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

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

При изменении значения schema_optionсистема не выполняет побитовое обновление. Это означает, что при настройке schema_option использования sp_changemergearticleсуществующие битовые параметры могут быть отключены. Чтобы сохранить существующие параметры, следует выполнить и ( Побитовая и) между заданным значением и текущим значением schema_option, которое можно определить, выполнив sp_helpmergearticle.

Внимание

Когда вы много (возможно, сотни) статей в публикации и вы выполняете sp_changemergearticle для одной из статей, это может занять много времени, чтобы завершить выполнение.

Допустимая таблица параметров схемы

В следующей таблице описаны допустимые schema_option значения в зависимости от типа статьи.

Тип статьи Значения параметра схемы
func schema only 0x01 и 0x2000.
indexed view schema only 0x01, 0x040, , 0x20000x01000x400000x1000000, и0x200000
proc schema only 0x01 и 0x2000.
table Все параметры.
view schema only 0x01, 0x040, , 0x20000x01000x400000x1000000, и0x200000

Примеры

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

Разрешения

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