sp_addmergearticle (Transact-SQL)
Добавляет статью к существующей публикации слиянием. Эта хранимая процедура выполняется в базе данных публикации на издателе.
Синтаксис
sp_addmergearticle [ @publication = ] 'publication'
, [ @article = ] 'article'
, [ @source_object = ] 'source_object'
[ , [ @type = ] 'type' ]
[ , [ @description = ] 'description' ]
[ , [ @column_tracking = ] 'column_tracking' ]
[ , [ @status = ] 'status' ]
[ , [ @pre_creation_cmd = ] 'pre_creation_cmd' ]
[ , [ @creation_script = ] 'creation_script' ]
[ , [ @schema_option = ] schema_option ]
[ , [ @subset_filterclause = ] 'subset_filterclause' ]
[ , [ @article_resolver = ] 'article_resolver' ]
[ , [ @resolver_info = ] 'resolver_info' ]
[ , [ @source_owner = ] 'source_owner' ]
[ , [ @destination_owner = ] 'destination_owner' ]
[ , [ @vertical_partition = ] 'vertical_partition' ]
[ , [ @auto_identity_range = ] 'auto_identity_range' ]
[ , [ @pub_identity_range = ] pub_identity_range ]
[ , [ @identity_range = ] identity_range ]
[ , [ @threshold = ] threshold ]
[ , [ @verify_resolver_signature = ] verify_resolver_signature ]
[ , [ @destination_object = ] 'destination_object' ]
[ , [ @allow_interactive_resolver = ] 'allow_interactive_resolver' ]
[ , [ @fast_multicol_updateproc = ] 'fast_multicol_updateproc' ]
[ , [ @check_permissions = ] check_permissions ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @published_in_tran_pub = ] 'published_in_tran_pub' ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ , [ @logical_record_level_conflict_detection = ] 'logical_record_level_conflict_detection' ]
[ , [ @logical_record_level_conflict_resolution = ] 'logical_record_level_conflict_resolution' ]
[ , [ @partition_options = ] partition_options ]
[ , [ @processing_order = ] processing_order ]
[ , [ @subscriber_upload_options = ] subscriber_upload_options ]
[ , [ @identityrangemanagementoption = ] 'identityrangemanagementoption' ]
[ , [ @delete_tracking = ] delete_tracking ]
[ , [ @compensate_for_errors = ] 'compensate_for_errors' ]
[ , [ @stream_blob_columns = ] 'stream_blob_columns' ]
Аргументы
[ @publication= ] 'publication'
Имя публикации, которая содержит статью. Аргумент publication имеет тип sysname и не имеет значения по умолчанию.[ @article= ] 'article'
Имя статьи. Имя должно быть уникальным в пределах публикации. Аргумент article имеет тип sysname и не имеет значения по умолчанию. Статья article должна находиться на том же компьютере, что и MicrosoftSQL Server, а ее имя должно соответствовать правилам для идентификаторов.[ @source_object= ] 'source_object'
Публикуемый объект базы данных. Аргумент source_object имеет тип sysname и не имеет значения по умолчанию. Дополнительные сведения о типах объектов, которые могут быть опубликованы репликацией слиянием, см. в разделе Публикация данных и объектов базы данных.[ @type= ] 'type'
Тип статьи. Аргумент type имеет тип sysname, значение по умолчанию table и может принимать одно из следующих значений.Значение
Описание
table (по умолчанию)
Таблица со схемой и данными. Репликация проверяет таблицу, определяя данные, которые должны реплицироваться.
func schema only
Только функция со схемой.
индексированное представлениетолько схема
Только индексированное представление со схемой.
proc schema only
Только хранимая процедура со схемой.
synonym schema only
Только синоним со схемой.
view schema only
Только представление со схемой.
[ @description= ] 'description'
Описание статьи. Аргумент description имеет тип nvarchar(255) и значение по умолчанию NULL.[ @column_tracking= ] 'column_tracking'
Параметр отслеживания на уровне столбца. Аргумент column_tracking имеет тип nvarchar(10) и значение по умолчанию FALSE. При значении true включается отслеживание столбцов. Установка значения false выключает отслеживание столбцов, обнаружение конфликтов остается на уровне строк. Если таблица уже опубликована в других публикациях слиянием, необходимо использовать для параметра отслеживания столбца то же значение, что и для существующих статей, основанных на данной таблице. Этот аргумент применим только для статей таблиц.Примечание Если для обнаружения конфликтов применяется трассировка на уровне строк (по умолчанию), базовая таблица может содержать не более 1 024 столбцов, однако столбцы из статьи должны быть отфильтрованы, чтобы было опубликовано не более 246 столбцов. Если применяется трассировка на уровне столбцов, базовая таблица может содержать не более 246 столбцов. Дополнительные сведения об уровне трассировки см. в подразделе «Уровень трассировки» раздела Способы обнаружения и разрешения конфликтов, используемые при репликации слиянием.
[ @status= ] 'status'
Состояние статьи. Аргумент status имеет тип nvarchar(10) и значение по умолчанию unsynced. Если аргумент имеет значение active, для публикации таблицы запускается сценарий начальной обработки. Если же он имеет значение unsynced, сценарий начальной обработки для публикации таблицы запускается при следующем запуске агента моментальных снимков.[ @pre_creation_cmd= ] 'pre_creation_cmd'
Указывает действие системы, если во время применения моментального снимка таблица уже существует на подписчике. Аргумент pre_creation_cmd имеет тип nvarchar(10) и может принимать одно из следующих значений.Значение
Описание
none
Если таблица на подписчике уже существует, не выполняется никаких действий.
delete
Выполняет удаление с использованием предложения WHERE, указанного в фильтре подмножества.
drop (по умолчанию)
Удаляет таблицу перед ее повторным созданием. Необходим для поддержки подписчиков MicrosoftSQL Server Compact 3.5 с пакетом обновления 1 (SP1).
truncate
Усекает целевую таблицу.
[ @creation_script= ] 'creation_script'
Путь и имя необязательного сценария схемы статьи, применяемого для создания статьи в базе данных подписки. Аргумент creation_script имеет тип nvarchar(255) и значение по умолчанию NULL.Примечание Сценарии создания не запускаются на подписчиках SQL Server Compact 3.5 с пакетом обновления 1 (SP1).
[ @schema_option= ] schema_option
Битовая карта, определяющая параметры создания схемы для конкретной статьи. Аргумент schema_option имеет тип binary(8) и может быть сочетанием следующих значений, объединенных с помощью оператора | (побитовое ИЛИ).Значение
Описание
0x00
Запрещает выполнение сценариев агентом моментальных снимков и использует сценарий предварительного создания схемы, указанной в аргументе creation_script.
0x01
Формирует создание объекта (CREATE TABLE, CREATE PROCEDURE и т. п.). Это значение по умолчанию для статей хранимых процедур.
0x10
Создает соответствующий кластеризованный индекс. Даже если этот параметр не установлен, индексы, связанные с первичными ключами и ограничениями уникальности, создаются при условии, что они уже определены в опубликованной таблице.
0x20
Преобразует определяемые пользователем типы данных (UDT) в базовые типы данных подписчика. Этот параметр не может использоваться, если на столбец UDT наложено ограничение CHECK или DEFAULT, если столбец UDT является частью первичного ключа или если вычисляемый столбец ссылается на столбец UDT.
0x40
Создает соответствующие некластеризованные индексы. Даже если этот параметр не установлен, индексы, связанные с первичными ключами и ограничениями уникальности, создаются при условии, что они уже определены в опубликованной таблице.
0x80
Реплицирует ограничения PRIMARY KEY. Любые индексы, связанные с ограничением, также реплицируются, даже если параметры 0x10 и 0x40 не включены.
0x100
Реплицирует пользовательские триггеры статьи таблицы, если они определены.
0x200
Реплицирует ограничения FOREIGN KEY. Если таблица, к которой происходит обращение, не является частью публикации, все ограничения FOREIGN KEY в опубликованной таблице не реплицируются.
0x400
Реплицирует ограничения CHECK.
0x800
Реплицирует значения по умолчанию.
0x1000
Реплицирует параметры сортировки на уровне столбцов.
0x2000
Реплицирует расширенные свойства, связанные с исходным объектом опубликованной статьи.
0x4000
Реплицирует ограничения UNIQUE. Любые индексы, связанные с ограничением, также реплицируются, даже если параметры 0x10 и 0x40 не включены.
0x8000
Данный параметр недопустим для издателей, использующих SQL Server 2005 или более поздние версии.
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, в типы данных, поддерживаемые SQL Server 2000. Сведения о сопоставлении этих типов см. в подразделе «Сопоставление новых типов данных для более ранних версий» раздела Использование нескольких версий SQL Server в топологии репликации.
0x40000000
Реплицирует разрешения.
0x80000000
Пытается удалять зависимости для всех объектов, не входящих в публикацию.
0x100000000
Использовать этот параметр для репликации атрибута FILESTREAM, если он указан в столбцах типа varbinary(max). Не указывайте этот параметр, если выполняется репликация таблиц на подписчики SQL Server 2005. Репликация таблиц с колонками FILESTREAM на подписчики SQL Server 2000 не поддерживается, независимо от того, как задан этот параметр схемы. См. связанный параметр 0x800000000.
0x200000000
Преобразует типы данных даты и времени (date, time, datetimeoffset и datetime2), которые появились в SQL Server 2008, в типы данных, поддерживаемые предыдущими версиями SQL Server. Сведения о сопоставлении этих типов см. в подразделе «Сопоставление новых типов данных для более ранних версий» раздела Использование нескольких версий SQL Server в топологии репликации.
0x400000000
Проводит репликацию параметра сжатия для данных и индексов. Дополнительные сведения см. в разделе Создание сжатых таблиц и индексов.
0x800000000
Задайте этот параметр для сохранения данных атрибута FILESTREAM в его файловой группе на подписчике. Если этот параметр не задан, данные атрибута FILESTREAM сохраняются в файловой группе по умолчанию. Репликация не создает файловые группы, поэтому, если этот параметр задан, необходимо создать файловую группу до применения моментального снимка на подписчике. Дополнительные сведения о создании объектов до применения моментального снимка см. в разделе Выполнение сценариев до и после применения моментального снимка.
См. связанный параметр 0x100000000.
0x1000000000
Преобразует определяемые пользователем типы данных среды CLR в тип данных varbinary(max), чтобы столбцы с определяемым пользователем типом данных могли реплицироваться на подписчики, на которых выполняется SQL Server 2005.
0x2000000000
Преобразует тип данных hierarchyid в varbinary(max), чтобы столбцы типа hierarchyid можно было реплицировать на подписчики, использующие SQL Server 2005. Дополнительные сведения об использовании столбцов hierarchyid в реплицированных таблицах см. в разделе hierarchyid (Transact-SQL).
0x4000000000
Проводит репликацию всех фильтруемых индексов для таблицы. Дополнительные сведения о фильтруемых индексах см. в разделе Рекомендации по проектированию отфильтрованных индексов.
0x8000000000
Преобразует типы данных geography и geometry в тип varbinary(max), чтобы обеспечить возможность репликации столбцов этих типов на подписчики SQL Server 2005.
0x10000000000
Производит репликацию индексов для столбцов типа geography и geometry.
Если это значение равно NULL, система автоматически создает допустимый параметр схемы для данной статьи. В таблице «Параметры схемы по умолчанию» в подразделе «Примечания» перечислены значения, которые выбираются исходя из типа статьи. Кроме того, не все значения аргумента schema_option допустимы для всех типов репликации и типов статей. В таблице «Допустимые параметры схемы», приведенной в разделе «Примечания», перечислены параметры, которые могут быть указаны для данного типа статьи.
Примечание Аргумент schema_option влияет только на параметры репликации исходного моментального снимка. После того как начальная схема была создана агентом моментальных снимков и применена к подписчику, репликация изменений схемы публикации на подписчик происходит на основании правил репликации изменений схемы и задания параметра replicate_ddl, указанного в вызове хранимой процедуры sp_addmergepublication. Дополнительные сведения см. в разделе Внесение изменений схем в базы данных публикаций.
[ @subset_filterclause= ] 'subset_filterclause'
Предложение WHERE, определяющее горизонтальную фильтрацию статьи таблицы, без указания самого слова WHERE. Аргумент subset_filterclause имеет тип nvarchar(1000) и пустую строку в качестве значения по умолчанию.Важно! По соображениям производительности в предложениях параметризованных фильтров строк не рекомендуется применять функции к именам столбцов, например: LEFT([MyColumn]) = SUSER_SNAME(). При использовании в выражении фильтра функции HOST_NAME и при переопределении ее значения может потребоваться преобразование типов данных с помощью функции CONVERT. Дополнительные сведения о наиболее эффективных способах подобного рода преобразований см. в подразделе «Переопределение значения функции HOST_NAME()» раздела Параметризованные фильтры строк.
[ @article_resolver= ] 'article_resolver'
Арбитр конфликтов на основе COM, используемый для разрешения конфликтов статей таблиц, или сборка .NET Framework, вызываемая для выполнения специальной бизнес-логики табличной статьи. Аргумент article_resolver имеет тип varchar(255) и значение по умолчанию NULL. Допустимые значения для этого аргумента перечислены в разделе «Пользовательские арбитры конфликтов Майкрософт». Если указанное значение не соответствует ни одному из арбитров конфликтов Майкрософт, SQL Server использует указанный арбитр вместо предоставляемого системой. Получить список имеющихся пользовательских арбитров можно с помощью хранимой процедуры sp_enumcustomresolvers. Дополнительные сведения см. в разделах Выполнение бизнес-логики при синхронизации слиянием и Расширенное обнаружение и разрешение конфликтов репликации слиянием.[ @resolver_info= ] 'resolver_info'
Используется для указания дополнительных сведений, необходимых пользовательскому арбитру конфликтов. Некоторым из арбитров конфликтов Майкрософт в качестве входного параметра требуется столбец. Аргумент resolver_info имеет тип nvarchar(255) и значение по умолчанию NULL. Дополнительные сведения см. в разделе Арбитры на базе технологии Microsoft COM.[ @source_owner= ] 'source_owner'
Имя владельца объекта source_object. Аргумент source_owner имеет тип sysname и значение по умолчанию NULL. Если значение равно NULL, то предполагается, что владельцем является текущий пользователь.[ @destination_owner= ] 'destination_owner'
Владелец объекта в базе данных подписки, отличный от dbo. Аргумент destination_owner имеет тип sysname и значение по умолчанию NULL. Если значение аргумента равно NULL, то предполагается, что владельцем является dbo.[ @vertical_partition= ] 'column_filter'
Включает и выключает фильтрацию столбцов в статье таблицы. Аргумент vertical_partition имеет тип nvarchar(5) и значение по умолчанию FALSE.Значение false указывает, что вертикальная фильтрация отсутствует и производится публикация всех столбцов.
Значение true очищает все столбцы, кроме объявленного первичного ключа и столбцов ROWGUID. Добавление столбцов производится при помощи хранимой процедуры sp_mergearticlecolumn.
[ @auto_identity_range= ] 'automatic_identity_range'
Включает и выключает автоматическую обработку диапазона идентификаторов для данной табличной статьи публикации во время ее создания. Аргумент auto_identity_range имеет тип nvarchar(5) и значение по умолчанию FALSE. Значение true включает автоматическую обработку диапазона идентификаторов, а значение false выключает.Примечание Аргумент auto_identity_range устарел и предоставляется только для обеспечения обратной совместимости. Для указания параметров управления диапазонами идентификаторов следует использовать аргумент identityrangemanagementoption. Дополнительные сведения см. в разделе Репликация столбцов идентификаторов.
[ @pub_identity_range= ] pub_identity_range
Управляет размером диапазона идентификаторов, выделенного подписчику с серверной подпиской, когда включено автоматическое управление диапазонами идентификаторов. Этот диапазон идентификаторов резервируется переиздающему подписчику для выделения собственным подписчикам. Аргумент pub_identity_range имеет тип bigint и значение по умолчанию NULL. Этот параметр обязателен, если аргумент identityrangemanagementoption имеет значение auto либо если аргумент auto_identity_range имеет значение true.[ @identity_range= ] identity_range
Управляет размером диапазона идентификаторов, выделяемого для издателя и подписчика, если включено автоматическое управление диапазонами идентификаторов. Аргумент identity_range имеет тип bigint и значение по умолчанию NULL. Этот параметр обязателен, если аргумент identityrangemanagementoption имеет значение auto либо если аргумент auto_identity_range имеет значение true.Примечание Аргумент identity_range управляет размером диапазона идентификаторов на переиздающих подписчиках, использующих предыдущие версии SQL Server.
[ @threshold= ] threshold
Процентное значение, управляющее процессом выделения агентом слияния нового диапазона идентификаторов. Если процентное отношение значений, указанное в аргументе threshold, уже использовано, агент слияния создает новый диапазон идентификаторов. Аргумент threshold имеет тип int и значение по умолчанию NULL. Этот параметр обязателен, если аргумент identityrangemanagementoption имеет значение auto либо если аргумент auto_identity_range имеет значение true.[ @verify_resolver_signature= ] verify_resolver_signature
Определяет, проверяется ли цифровая подпись для арбитра конфликтов в репликации слиянием. Аргумент verify_resolver_signature имеет тип int и значение по умолчанию 1.Значение 0 указывает, что подпись не проверяется.
Значение 1 указывает, что подпись будет проверяться, чтобы определить, получен ли арбитр из надежного источника.
[ @destination_object= ] 'destination_object'
Имя объекта в базе данных подписки. Аргумент destination_object имеет тип sysname и значение по умолчанию, равное значению аргумента @source_object. Этот аргумент может быть указан только для статей типа «только схема», например для статей хранимых процедур, представлений или пользовательских функций. Если статья определена как табличная статья, значение аргумента @source\_object переопределяет значение аргумента destination_object.[ @allow_interactive_resolver= ] 'allow_interactive_resolver'
Разрешает или запрещает использование интерактивного арбитра конфликтов для данной статьи. Аргумент allow_interactive_resolver имеет тип nvarchar(5) и значение по умолчанию FALSE. Значение true разрешает использование интерактивного арбитра конфликтов для данной статьи, значение false запрещает.Примечание Интерактивный арбитр конфликтов не поддерживается подписчиками SQL Server Compact 3.5 с пакетом обновления 1 (SP1).
[ @fast_multicol_updateproc= ] 'fast_multicol_updateproc'
Данный аргумент не рекомендуется к использованию, он поддерживается только для обратной совместимости сценариев.[ @check_permissions= ] check_permissions
Битовая карта разрешений уровня таблицы, которые проверяются, когда агент слияния применяет изменения на издателе. Если имя входа или учетная запись на издателе, от имени которой выполняется процесс слияния, не обладает необходимыми разрешениями на таблицы, недопустимые изменения регистрируются в журнале как конфликты. Аргумент check_permissions имеет тип int и может быть результатом логической операции | (побитовое ИЛИ) над одним или несколькими следующими значениями.Значение
Описание
0x00 (по умолчанию)
Разрешения не проверяются.
0x10
Проверяет разрешения на издателе перед передачей операций вставки, выполняемых на подписчике.
0x20
Проверяет разрешения на издателе перед передачей операций обновления, выполняемых на подписчике.
0x40
Проверяет разрешения на издателе перед передачей операций удаления, выполняемых на подписчике.
[ @force_invalidate_snapshot= ] force_invalidate_snapshot
Подтверждает, что действие, выполненное этой хранимой процедурой, может сделать недействительным существующий моментальный снимок. Аргумент force_invalidate_snapshot имеет тип bit и значение по умолчанию 0.Значение 0 указывает, что добавление статьи не приводит к недействительности моментального снимка. Если хранимая процедура определила, что изменение требует создания нового моментального снимка, возникает ошибка и изменение не производится.
Значение 1 указывает, что добавление статьи может привести к недопустимости моментального снимка. Если существующие подписки потребуют нового моментального снимка, дается разрешение на пометку существующего моментального снимка как устаревшего и на создание нового снимка. Аргументу force_invalidate_snapshot присваивается значение 1 при добавлении статьи в публикацию с помощью существующего моментального снимка.
[ @published_in_tran_pub= ] 'published_in_tran_pub'
Указывает, что статья публикации слиянием также опубликована в публикации транзакций. Аргумент published_in_tran_pub имеет тип nvarchar(5) и значение по умолчанию FALSE. Значение true указывает, что статья также опубликована в публикации транзакций.[ @force_reinit_subscription= ] force_reinit_subscription
Подтверждает, что действие, выполняемое данной хранимой процедурой, может сделать необходимой повторную инициализацию текущих подписок. Аргумент force_reinit_subscription имеет тип bit и значение по умолчанию 0.Значение 0 указывает, что добавление статьи не вызывает повторной инициализации подписки. Если хранимая процедура определяет, что изменения потребуют повторной инициализации подписок, возникает ошибка и изменения не выполняются.
Значение 1 обозначает, что изменения в статье слияния приведут к повторной инициализации текущих подписок и предоставлению разрешения на инициализацию подписки. Аргументу force_reinit_subscription присваивается значение 1, если в аргументе subset_filterclause указан параметризованный фильтр строк.
[ @logical_record_level_conflict_detection= ] 'logical_record_level_conflict_detection'
Указывает уровень обнаружения конфликтов для статьи, входящей в состав логической записи. Аргумент logical_record_level_conflict_detection имеет тип nvarchar(5) и значение по умолчанию FALSE.Значение true указывает, что конфликт будет отслеживаться, если производятся изменения в любом месте логической записи.
Значение false указывает, что используется обнаружение конфликтов по умолчанию, определяемое аргументом column_tracking. Дополнительные сведения см. в разделе Изменения группирования связанных строк с логическими записями.
Примечание Поскольку логические записи не поддерживаются подписчиками выпуска SQL Server Compact 3.5 с пакетом обновления 1 (SP1), то для поддержки этих подписчиков необходимо указать для аргумента logical_record_level_conflict_detection значение false.
[ @logical_record_level_conflict_resolution= ] 'logical_record_level_conflict_resolution'
Указывает уровень разрешения конфликтов для статьи, входящей в состав логической записи. Аргумент logical_record_level_conflict_resolution имеет тип nvarchar(5) и значение по умолчанию FALSE.Значение true указывает, что выигравшая логическая запись целиком перезаписывает побежденную.
Значение false указывает, что выигравшие строки не ограничиваются пределами логической записи. Если значение аргумента logical_record_level_conflict_detection равно true, аргументу logical_record_level_conflict_resolution также должно быть присвоено значение true. Дополнительные сведения см. в разделе Изменения группирования связанных строк с логическими записями.
Примечание Поскольку логические записи не поддерживаются подписчиками выпуска SQL Server Compact 3.5 с пакетом обновления 1 (SP1), то для поддержки этих подписчиков необходимо указать для аргумента logical_record_level_conflict_resolution значение false.
[ @partition_options= ] partition_options
Определяет метод, при помощи которого производится секционирование статьи, позволяющее произвести оптимизацию производительности в случае, когда все строки принадлежат только одной секции или только одной подписке. Аргумент partition_options имеет тип tinyint и может принимать одно из следующих значений.Значение
Описание
0 (по умолчанию)
Фильтрация для статьи либо статическая, либо не возвращает уникальное подмножество данных для каждой из секций, то есть перекрывающаяся секция.
1
Секции перекрываются, и обновления языка обработки данных, выполняемые на подписчике, не могут изменить секцию, к которой принадлежит строка.
2
Фильтрация для статьи дает неперекрывающиеся секции, но несколько подписчиков могут получить одну и ту же секцию.
3
Фильтрация для статьи дает неперекрывающиеся секции, уникальные для каждой из подписок.
Примечание Если исходная таблица для статьи уже опубликована в другой публикации, значение аргумента partition_options должно быть одинаковым для обеих статей.
[ @processing_order= ] processing_order
Указывает порядок обработки статей в публикации слиянием. Аргумент processing_order имеет тип int и значение по умолчанию 0. Значение 0 означает, что статья не имеет порядкового номера, а любое другое значение представляет порядковый номер обработки для данной статьи. Статьи обрабатываются по номерам, от меньших к большим. Если две статьи имеют один и тот же порядковый номер, порядок обработки определяется по порядковому номеру псевдонима статьи в системной таблице sysmergearticles. Дополнительные сведения см. в разделе Указание порядка обработки статей слияния.[ @subscriber_upload_options= ] subscriber_upload_options
Определяет ограничения на обновления, производимые на подписчике с клиентской подпиской. Дополнительные сведения см. в разделе Оптимизация производительности репликации слиянием при работе со статьями, доступными только для загрузки. Аргумент subscriber_upload_options имеет тип tinyint и может принимать одно из следующих значений.Значение
Описание
0 (по умолчанию)
Без ограничений. Изменения, произведенные на подписчике, передаются на издатель.
1
Изменения на подписчике разрешены, но они не передаются на издатель.
2
Изменения на подписчике не разрешены.
Примечание Если исходная таблица для статьи уже опубликована в другой публикации, значение аргумента subscriber_upload_options должно быть одинаковым для обеих статей.
[ @identityrangemanagementoption= ] identityrangemanagementoption
Определяет, как выполняется управление диапазонами идентификаторов для статьи. Аргумент identityrangemanagementoption имеет тип nvarchar(10) и может принимать одно из следующих значений.Значение
Описание
none
Запрещает управление диапазонами идентификаторов.
manual
Помечает столбец идентификаторов как NOT FOR REPLICATION, чтобы разрешить ручное управление диапазонами идентификаторов.
auto
Задает автоматическое управление диапазонами идентификаторов.
NULL (по умолчанию)
По умолчанию эквивалентно значению none, если значение аргумента auto_identity_range отлично от true.
Если аргумент identityrangemanagementoption равен NULL, то для обеспечения обратной совместимости проверяется значение аргумента auto_identity_range . Если же аргумент identityrangemanagementoption не равен NULL, значение аргумента auto_identity_range не учитывается. Дополнительные сведения см. в разделе Репликация столбцов идентификаторов.
[ @delete_tracking= ] 'delete_tracking'
Указывает, производится ли репликация операций удаления. Аргумент delete_tracking имеет тип nvarchar(5) и значение по умолчанию TRUE. Значение false указывает, что операции удаления не реплицируются, а значение true указывает, что операции удаления реплицируются, что является обычным поведением для репликации слиянием. Если значение аргумента delete_tracking равно false, строки, удаляемые на подписчике, должны быть вручную удалены на издателе, а строки, удаленные на издателе, должны быть вручную удалены на подписчике.Важно! Присвоение аргументу delete_tracking значения false приведет к расхождению данных. Если исходная таблица для статьи уже опубликована в другой публикации, значение аргумента delete_tracking должно быть одинаковым для обеих статей.
Примечание Аргументы delete_tracking не могут быть установлены с помощью Мастера создания публикаций или диалогового окна Свойства публикации.
[ @compensate_for_errors= ] 'compensate_for_errors'
Указывает, будут ли выполняться корректирующие действия, если во время синхронизации возникнут ошибки. Аргумент compensate_for_errors i имеет тип nvarchar(5) и значение по умолчанию FALSE. Если значение этого аргумента true, то изменения, которые при выполнении синхронизации не могут быть применены на подписчике или на издателе, всегда вызывают корректирующие действия по их отмене. Однако один неверно настроенный подписчик, формирующий ошибку, может быть причиной отката изменений на других подписчиках и издателях. Значение false отключает корректирующие действия, но при этом ошибки по-прежнему заносятся в журнал, и при последующих слияниях продолжаются попытки применить изменения до тех пор, пока они не завершатся успехом.Примечание Для подписок по запросу на подписчиках, использующих MicrosoftSQL Server 2000 версии 8.00.858 и более ранних версий (включая пакет обновления 3), корректирующие действия выполняются даже с аргументом compensate_for_errors , равным false.
Важно! Даже если данные в измененных строках неконвергентны, то, если исправить все ошибки, изменения можно применить и добиться конвергенции данных. Если исходная таблица для статьи уже опубликована в другой публикации, значение аргумента compensate_for_errors должно быть одинаковым для обеих статей.
[ @stream_blob_columns= ] 'stream_blob_columns'
Указывает, что при репликации столбцов больших двоичных объектов может быть использована оптимизация потока данных. Аргумент stream_blob_columns имеет тип nvarchar(5) и значение по умолчанию FALSE. Значение true означает, что будет выполнена попытка произвести оптимизацию.Важно! Включение данного режима оптимизации памяти может уменьшить производительность агента слияния во время синхронизации. Этот параметр должен использоваться только при репликации столбцов, содержащих мегабайты данных.
Примечание Некоторые возможности репликации слиянием, например логические записи, могут воспрепятствовать включению потоковой оптимизации при репликации больших двоичных объектов, даже если значение аргумента stream_blob_columns равно true.
Значения кодов возврата
0 (успешное завершение) или 1 (ошибка)
Замечания
Хранимая процедура sp_addmergearticle используется в репликации слиянием.
При публикации объектов их определения копируются на подписчики. При публикации объекта базы данных, который зависит от одного или нескольких других объектов, обязательна публикация всех объектов, на которые он ссылается. Например, при публикации представления, имеющего зависимость от таблицы, обязательна публикация и этой таблицы.
Если указано значение 3 для аргумента partition_options, для каждой секции данных в этой статье может быть только одна подписка. Если создается вторая подписка, в которой условие фильтрации новой подписки сводится к той же секции, что и в существующей подписке, существующая подписка удаляется.
Если для аргумента partition_options указано значение 3, метаданные очищаются при запуске агента слияния и время действия секционированного снимка истекает быстрее. При использовании этого параметра следует разрешить запрошенный подписчиком секционированный снимок. Дополнительные сведения см. в разделе Моментальные снимки для публикаций слиянием с параметризованными фильтрами.
Если при помощи аргумента subset_filterclause статья со статическим горизонтальным фильтром добавляется в существующую публикацию, содержащую статьи с параметризованными фильтрами, необходимо выполнить повторную инициализацию подписок.
При указании аргумента processing_order рекомендуется оставлять зазоры между порядковыми значениями статей, поскольку это облегчит присвоение статьям новых значений аргумента в будущем. Например, имеется три статьи: Статья1, Статья2 и Статья3. Присвойте аргументу processing_order значения 10, 20 и 30, а не 1, 2 и 3. Дополнительные сведения см. в разделе Указание порядка обработки статей слияния.
Таблица «Параметры схемы по умолчанию»
В этой таблице описаны параметры по умолчанию, которые устанавливаются хранимой процедурой, если в качестве аргумента schema_option указано значение NULL. Эти значения зависят от типа статьи.
Тип статьи |
Значение параметра схемы |
---|---|
func schema only |
0x01 |
indexed view schema only |
0x01 |
proc schema only |
0x01 |
table |
|
view schema only |
0x01 |
Примечание |
---|
Если публикация поддерживает ранние версии SQL Server, параметр схемы по умолчанию для типа table равен 0x30034FF1. |
Таблица «Допустимые параметры схемы»
В следующей таблице описаны допустимые значения для аргумента schema_option, зависящие от типа статьи.
Тип статьи |
Значения параметра схемы |
---|---|
func schema only |
0x01 и 0x2000 |
indexed view schema only |
0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000 и 0x200000 |
proc schema only |
0x01 и 0x2000 |
table |
Все параметры. |
view schema only |
0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000 и 0x200000 |
Пример
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.EmployeeID = 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.
См. также