sp_changearticle (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

sp_changearticle [ [@publication= ] 'publication' ]
    [ , [ @article= ] 'article' ]
    [ , [ @property= ] 'property' ]
    [ , [ @value= ] 'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] 'publisher' ]

Аргументы

  • [ @publication=] 'publication'
    Имя публикации, которая содержит статью. Аргумент publication имеет тип sysname и значение по умолчанию NULL.

  • [ @article=] 'article'
    Имя статьи, свойства которой будут изменены. Аргумент article имеет тип sysname и значение по умолчанию NULL.

  • [ @property=] 'property'
    Свойство статьи, которое будет изменено. Аргумент property имеет тип nvarchar(100).

  • [ @value=] 'value'
    Новое значение свойства статьи. Аргумент value имеет тип nvarchar(255).

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

    Свойство

    Значения

    Описание

    creation_script

     

    Путь и имя сценария схемы статьи, используемого для создания целевых таблиц. Значением по умолчанию является NULL.

    del_cmd

     

    Инструкция DELETE к выполнению; иначе формируется из журнала.

    description

     

    Новая запись описания статьи.

    dest_object

     

    Добавлено для обратной совместимости. Использовать dest_table.

    dest_table

     

    Новая целевая таблица.

    destination_owner

     

    Имя владельца целевого объекта.

    фильтр

     

    Новая хранимая процедура для фильтрации таблицы (горизонтальная фильтрация). Значением по умолчанию является NULL. Невозможно изменить для публикаций в одноранговой репликации.

    fire_triggers_on_snapshot

    true

    Реплицированные пользовательские триггеры срабатывают при применении исходного моментального снимка.

    ПримечаниеПримечание
    Чтобы триггеры были реплицированы, битовая маска schema_option должна содержать значение 0x100.

     

    false

    Реплицированные пользовательские триггеры не срабатывают при применении исходного моментального снимка.

    identity_range

     

    Управляет размером диапазонов идентификаторов, назначенных на подписчике. В случае одноранговой репликации не поддерживается.

    ins_cmd

     

    Инструкция INSERT к выполнению; иначе формируется из журнала.

    pre_creation_cmd

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

     

    нет

    Не использует команду.

     

    drop

    Удаляет целевую таблицу полностью.

     

    delete

    Удаляет целевую таблицу.

     

    truncate

    Усекает целевую таблицу.

    pub_identity_range

     

    Управляет размером диапазонов идентификаторов, назначенных на подписчике. В случае одноранговой репликации не поддерживается.

    schema_option

    Указывает битовую карту параметра формирования схемы для данной статьи. Аргумент schema_option имеет тип binary(8). Дополнительные сведения см. в подразделе «Примечания» далее в этом разделе.

     

    0x00

    Отключает выполнение сценариев агентом моментальных снимков.

     

    0x01

    Формирует создание объекта (CREATE TABLE, CREATE PROCEDURE и т.п.).

     

    0x02

    Создает хранимые процедуры, которые распространяют изменения в статье, если они заданы.

     

    0x04

    Столбцы идентификаторов вносятся в сценарий с помощью свойства IDENTITY.

     

    0x08

    Реплицирует столбцы timestamp. Если не задано, столбцы timestamp реплицируются как binary.

     

    0x10

    Создает соответствующий кластеризованный индекс.

     

    0x20

    Преобразует определяемые пользователем типы данных (UDT) в базовые типы данных подписчика. Этот параметр не может использоваться, если на столбец UDT наложено ограничение CHECK или DEFAULT, если столбец UDT является частью первичного ключа или если вычисляемый столбец ссылается на столбец UDT. Не поддерживается для издателей Oracle.

     

    0x40

    Создает соответствующие некластеризованные индексы.

     

    0x80

    Включает объявленную ссылочную целостность по первичным ключам.

     

    0x100

    Реплицирует пользовательские триггеры для статьи таблицы, если заданы.

     

    0x200

    Реплицирует ограничения FOREIGN KEY. Если таблица, к которой происходит обращение, не является частью публикации, все ограничения FOREIGN KEY в опубликованной таблице не реплицируются.

     

    0x400

    Реплицирует ограничения CHECK.

     

    0x800

    Реплицирует значения по умолчанию.

     

    0x1000

    Реплицирует параметры сортировки на уровне столбцов.

     

    0x2000

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

     

    0x4000

    Реплицирует уникальные ключи для статьи таблицы, если заданы.

     

    0x8000

    Реплицирует первичный ключ и уникальные ключи статьи таблиц в виде ограничений, используя инструкции ALTER TABLE.

    ПримечаниеПримечание
    Этот параметр устарел. Вместо этого используйте 0x80 и 0x4000.

     

    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, имеющие размер больше 8 000 байт, в тип данных 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.

    0x20000000000

    Производит репликацию атрибута SPARSE для столбцов. Дополнительные сведения об этом атрибуте см. в разделе Использование разреженных столбцов.

    status

    Устанавливает новое состояние свойства.

     

    dts horizontal partitions

    Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

     

    include column names

    Имена столбцов включаются в реплицируемую инструкцию INSERT.

     

    no column names

    Имена столбцов не включаются в реплицируемую инструкцию INSERT.

     

    no dts horizontal partitions

    Горизонтальная секция статьи не задается трансформируемой подпиской.

     

    нет

    Очищает все параметры состояния в таблице sysarticles и помечает статью как неактивную.

     

    parameters

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

     

    string literals

    Изменения передаются подписчику при помощи значений строковых литералов.

    sync_object

     

    Имя таблицы или представления, которые используются для создания выходного файла синхронизации. Значением по умолчанию является NULL. Не поддерживается для издателей Oracle.

    tablespace

    Определяет табличное пространство, используемое таблицей, выполняющей протоколирование, для статьи, опубликованной с базы данных Oracle. Дополнительные сведения см. в разделе Управление табличными пространствами Oracle.

    threshold

     

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

    type

     

    Не поддерживается для издателей Oracle.

     

    logbased

    Статья на основе журнала.

     

    logbased manualboth

    Создаваемая на основе журнала статья с фильтрацией вручную и представлением вручную. При использовании данного параметра также должны быть установлены свойства sync_object и filter. Не поддерживается для издателей Oracle.

     

    logbased manualfilter

    Создаваемая на основе журнала статья с фильтрацией вручную. При использовании данного параметра также должны быть установлены свойства sync_object и filter. Не поддерживается для издателей Oracle.

     

    logbased manualview

    Создаваемая на основе журнала статья с представлением вручную. При использовании данного параметра должно быть установлено свойство sync_object. Не поддерживается для издателей Oracle.

     

    indexed viewlogbased

    Статья индексированного представления, создаваемая на основе журнала. Не поддерживается для издателей Oracle. Для этого типа статьи нет необходимости отдельно публиковать базовую таблицу.

     

    indexed viewlogbased manualboth

    Создаваемая на основе журнала статья индексированного представления с фильтрацией вручную и представлением вручную. При использовании данного параметра также должны быть установлены свойства sync_object и filter. Для этого типа статьи нет необходимости отдельно публиковать базовую таблицу. Не поддерживается для издателей Oracle.

     

    indexed viewlogbased manualfilter

    Создаваемая на основе журнала статья индексированного представления с фильтрацией вручную. При использовании данного параметра также должны быть установлены свойства sync_object и filter. Для этого типа статьи нет необходимости отдельно публиковать базовую таблицу. Не поддерживается для издателей Oracle.

     

    indexed viewlogbased manualview

    Создаваемая на основе журнала статья индексированного представления с представлением вручную. При использовании данного параметра должно быть установлено свойство sync_object. Для этого типа статьи нет необходимости отдельно публиковать базовую таблицу. Не поддерживается для издателей Oracle.

    upd_cmd

     

    Инструкция UPDATE к выполнению; иначе формируется из журнала.

    NULL

    NULL

    Возвращает список свойств статьи, которые могут быть изменены.

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

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

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

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

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

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

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

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

  • [ @publisher= ] 'publisher'
    Задает издатель, отличный от SQL Server. Аргумент publisher имеет тип sysname и значение по умолчанию NULL.

    ПримечаниеПримечание

    Аргумент publisher не должен использоваться при изменении свойств статьи на издателе SQL Server.

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

0 (успешное завершение) или 1 (неуспешное завершение)

Замечания

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

Если статья принадлежит к публикации, которая поддерживает одноранговую репликацию транзакций, то можно изменить только свойства description, ins_cmd, upd_cmd и del_cmd.

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

  • del_cmd

  • dest_table

  • destination_owner

  • ins_cmd

  • pre_creation_cmd

  • schema_options;

  • upd_cmd.

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

  • del_cmd

  • dest_table

  • destination_owner

  • фильтр

  • ins_cmd

  • status

  • upd_cmd.

Для существующей публикации можно использовать sp_changearticle для изменения статьи без необходимости удаления и создания заново всей публикации.

ПримечаниеПримечание

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

Допустимые параметры схемы

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

Тип статьи

Тип репликации

 

 

Репликация транзакций

Репликация моментальных снимков

logbased

Все параметры

Все параметры, кроме 0x02

logbased manualfilter

Все параметры

Все параметры, кроме 0x02

logbased manualview

Все параметры

Все параметры, кроме 0x02

indexed view logbased

Все параметры

Все параметры, кроме 0x02

indexed view logbased manualfilter

Все параметры

Все параметры, кроме 0x02

indexed view logbased manualview

Все параметры

Все параметры, кроме 0x02

indexed view logbase manualboth

Все параметры

Все параметры, кроме 0x02

proc exec

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 и 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 и 0x80000000

serializable proc exec

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 и 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 и 0x80000000

proc schema only

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 и 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 и 0x80000000

view schema only

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 и 0x80000000

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 и 0x80000000

func schema only

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 и 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 и 0x80000000

indexed view schema only

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 и 0x80000000

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 и 0x80000000

ПримечаниеПримечание

Для публикаций, обновляемых посредством очередей, значение 0x80 аргумента schema_option должно быть включено. Публикации, отличные от публикаций SQL Server, поддерживают следующие значения аргумента schema_option: 0x01, 0x02, 0x10, 0x40, 0x80, 0x1000 и 0x4000.

Пример

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

Разрешения

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