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


sp_changearticle (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

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

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

Синтаксис

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

Аргументы

[ @publication = ] N'publication'

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

[ @article = ] N'article'

Имя статьи, свойство которой необходимо изменить. @article — sysname с значением по умолчаниюNULL.

[ @property = ] N'property'

Свойство статьи для изменения. @property — nvarchar(100) с значением по умолчаниюNULL.

[ @value = ] N'value'

Новое значение свойства статьи. @value — nvarchar(255) с значением по умолчаниюNULL.

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

Свойство Значения Description
creation_script Путь и имя скрипта схемы статьи, используемого для создания целевых таблиц. Значение по умолчанию — NULL.
del_cmd DELETE оператор для выполнения; в противном случае он создается из журнала.
description Новая запись описания статьи.
dest_object Предоставляется для обратной совместимости. Используйте dest_table.
dest_table Новая целевая таблица.
destination_owner Имя владельца целевого объекта.
filter Новая хранимая процедура для фильтрации таблицы (горизонтальная фильтрация). Значение по умолчанию — NULL. Невозможно изменить публикации в одноранговой репликации.
fire_triggers_on_snapshot true Реплицированные пользовательские триггеры срабатывают при применении исходного моментального снимка.

Примечание. Для репликации триггеров значение битовой маски schema_option должно включать значение 0x100.
false Реплицированные триггеры пользователей не выполняются при применении начального моментального снимка.
identity_range Управляет размером диапазонов идентификаторов, назначенных на подписчике. В случае одноранговой репликации не поддерживается.
ins_cmd INSERT оператор для выполнения; в противном случае он создается из журнала.
pre_creation_cmd Команда предустановки, которая может удалять, удалять или усечь целевую таблицу перед применением синхронизации.
none Не использует команду.
drop Удаляет целевую таблицу полностью.
delete Удаляет целевую таблицу.
truncate Усекает целевую таблицу.
pub_identity_range Управляет размером диапазонов идентификаторов, назначенных на подписчике. В случае одноранговой репликации не поддерживается.
schema_option Указывает битовую карту параметра формирования схемы для данной статьи. schema_optionbinary(8). Дополнительные сведения см. в разделе с примечаниями.
0x00 Отключает выполнение сценариев агентом моментальных снимков.
0x01 Создает создание объекта (CREATE TABLECREATE PROCEDUREи т. д.).
0x02 Создает хранимые процедуры, которые распространяют изменения в статье, если они заданы.
0x04 Столбцы удостоверений скриптируются с помощью IDENTITY свойства.
0x08 Репликация столбцов метки времени. Если не задано, столбцы метки времени реплицируются как двоичные.
0x10 Создает соответствующий кластеризованный индекс.
0x20 Преобразует определяемые пользователем типы данных (UDT) в базовые типы данных подписчика. Этот параметр нельзя использовать, если столбец CHECK UDT является частью первичного ключа или DEFAULT если вычисляемый столбец ссылается на столбец 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 (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) размером более 8000 байт в 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.
0x20000000000 Реплицирует SPARSE атрибут для столбцов. Дополнительные сведения об этом атрибуте см. в разделе "Использование разреженных столбцов".
0x40000000000 Включите скрипты агентом моментальных снимков для создания оптимизированной для памяти таблицы на подписчике.
0x80000000000 Преобразует кластеризованный индекс в некластеризованный индекс для статей, оптимизированных для памяти.
status Устанавливает новое состояние свойства.
dts horizontal partitions Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.
include column names Имена столбцов включаются в реплицированную INSERT инструкцию.
no column names Имена столбцов не включаются в реплицированную INSERT инструкцию.
no dts horizontal partitions Горизонтальная секция статьи не определена преобразуемой подпиской.
none Очищает все параметры состояния в таблице 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 бит с значением по умолчанию0.

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

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

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

[ @force_reinit_subscription = ] force_reinit_subscription

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

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

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

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

[ @publisher = ] N'publisher'

Указывает издатель, отличный от SQL Server. @publisher — sysname с значением по умолчаниюNULL.

Примечание.

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

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

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

Замечания

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

Если статья принадлежит публикации, поддерживающей одноранговую репликацию транзакций, можно изменять descriptionins_cmdupd_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
  • filter
  • 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, 0x20000x80000000x4000000x20000000x100000000x800000, 0x20000000, и 0x400000000x80000000 0x01, 0x20, 0x20000x80000000x4000000x20000000x100000000x800000, 0x20000000, и 0x400000000x80000000
serializable proc exec 0x01, 0x20, 0x20000x80000000x4000000x20000000x100000000x800000, 0x20000000, и 0x400000000x80000000 0x01, 0x20, 0x20000x80000000x4000000x20000000x100000000x800000, 0x20000000, и 0x400000000x80000000
proc schema only 0x01, 0x20, 0x20000x80000000x4000000x20000000x100000000x800000, 0x20000000, и 0x400000000x80000000 0x01, 0x20, 0x20000x80000000x4000000x20000000x100000000x800000, 0x20000000, и 0x400000000x80000000
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, 0x20000x80000000x4000000x20000000x100000000x800000, 0x20000000, и 0x400000000x80000000 0x01, 0x20, 0x20000x80000000x4000000x20000000x100000000x800000, 0x20000000, и 0x400000000x80000000
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

Примечание.

Для публикаций, обновляемых в очереди, schema_option необходимо включить значение 0x80 . Поддерживаемые schema_option значения для публикаций, отличных от SQL Server, : 0x01, 0x02, 0x10, 0x800x400x1000 и .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 [AdventureWorks2022]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

Разрешения

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