MergeArticle Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет статью в публикации слияния.
public ref class MergeArticle sealed : Microsoft::SqlServer::Replication::Article
public sealed class MergeArticle : Microsoft.SqlServer.Replication.Article
type MergeArticle = class
inherit Article
Public NotInheritable Class MergeArticle
Inherits Article
- Наследование
Примеры
В этом примере создаются три статьи слияния и связанные с ними фильтры объединения.
// Define the Publisher and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";
// Specify article names.
string articleName1 = "Employee";
string articleName2 = "SalesOrderHeader";
string articleName3 = "SalesOrderDetail";
// Specify join filter information.
string filterName12 = "SalesOrderHeader_Employee";
string filterClause12 = "Employee.EmployeeID = " +
"SalesOrderHeader.SalesPersonID";
string filterName23 = "SalesOrderDetail_SalesOrderHeader";
string filterClause23 = "SalesOrderHeader.SalesOrderID = " +
"SalesOrderDetail.SalesOrderID";
string salesSchema = "Sales";
string hrSchema = "HumanResources";
MergeArticle article1 = new MergeArticle();
MergeArticle article2 = new MergeArticle();
MergeArticle article3 = new MergeArticle();
MergeJoinFilter filter12 = new MergeJoinFilter();
MergeJoinFilter filter23 = new MergeJoinFilter();
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
// Create three merge articles that are horizontally partitioned
// using a parameterized row filter on Employee.EmployeeID, which is
// extended to the two other articles using join filters.
try
{
// Connect to the Publisher.
conn.Connect();
// Create each article.
// For clarity, each article is defined separately.
// In practice, iterative structures and arrays should
// be used to efficiently create multiple articles.
// Set the required properties for the Employee article.
article1.ConnectionContext = conn;
article1.Name = articleName1;
article1.DatabaseName = publicationDbName;
article1.SourceObjectName = articleName1;
article1.SourceObjectOwner = hrSchema;
article1.PublicationName = publicationName;
article1.Type = ArticleOptions.TableBased;
// Define the parameterized filter clause based on Hostname.
article1.FilterClause = "Employee.LoginID = HOST_NAME()";
// Set the required properties for the SalesOrderHeader article.
article2.ConnectionContext = conn;
article2.Name = articleName2;
article2.DatabaseName = publicationDbName;
article2.SourceObjectName = articleName2;
article2.SourceObjectOwner = salesSchema;
article2.PublicationName = publicationName;
article2.Type = ArticleOptions.TableBased;
// Set the required properties for the SalesOrderDetail article.
article3.ConnectionContext = conn;
article3.Name = articleName3;
article3.DatabaseName = publicationDbName;
article3.SourceObjectName = articleName3;
article3.SourceObjectOwner = salesSchema;
article3.PublicationName = publicationName;
article3.Type = ArticleOptions.TableBased;
if (!article1.IsExistingObject) article1.Create();
if (!article2.IsExistingObject) article2.Create();
if (!article3.IsExistingObject) article3.Create();
// Select published columns for SalesOrderHeader.
// Create an array of column names to vertically filter out.
// In this example, only one column is removed.
String[] columns = new String[1];
columns[0] = "CreditCardApprovalCode";
// Remove the column.
article2.RemoveReplicatedColumns(columns);
// Define a merge filter clauses that filter
// SalesOrderHeader based on Employee and
// SalesOrderDetail based on SalesOrderHeader.
// Parent article.
filter12.JoinArticleName = articleName1;
// Child article.
filter12.ArticleName = articleName2;
filter12.FilterName = filterName12;
filter12.JoinUniqueKey = true;
filter12.FilterTypes = FilterTypes.JoinFilter;
filter12.JoinFilterClause = filterClause12;
// Add the join filter to the child article.
article2.AddMergeJoinFilter(filter12);
// Parent article.
filter23.JoinArticleName = articleName2;
// Child article.
filter23.ArticleName = articleName3;
filter23.FilterName = filterName23;
filter23.JoinUniqueKey = true;
filter23.FilterTypes = FilterTypes.JoinFilter;
filter23.JoinFilterClause = filterClause23;
// Add the join filter to the child article.
article3.AddMergeJoinFilter(filter23);
}
catch (Exception ex)
{
// Do error handling here and rollback the transaction.
throw new ApplicationException(
"The filtered articles could not be created", ex);
}
finally
{
conn.Disconnect();
}
' Define the Publisher and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"
' Specify article names.
Dim articleName1 As String = "Employee"
Dim articleName2 As String = "SalesOrderHeader"
Dim articleName3 As String = "SalesOrderDetail"
' Specify join filter information.
Dim filterName12 As String = "SalesOrderHeader_Employee"
Dim filterClause12 As String = "Employee.EmployeeID = " + _
"SalesOrderHeader.SalesPersonID"
Dim filterName23 As String = "SalesOrderDetail_SalesOrderHeader"
Dim filterClause23 As String = "SalesOrderHeader.SalesOrderID = " + _
"SalesOrderDetail.SalesOrderID"
Dim salesSchema As String = "Sales"
Dim hrSchema As String = "HumanResources"
Dim article1 As MergeArticle = New MergeArticle()
Dim article2 As MergeArticle = New MergeArticle()
Dim article3 As MergeArticle = New MergeArticle()
Dim filter12 As MergeJoinFilter = New MergeJoinFilter()
Dim filter23 As MergeJoinFilter = New MergeJoinFilter()
' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
' Create three merge articles that are horizontally partitioned
' using a parameterized row filter on Employee.EmployeeID, which is
' extended to the two other articles using join filters.
Try
' Connect to the Publisher.
conn.Connect()
' Create each article.
' For clarity, each article is defined separately.
' In practice, iterative structures and arrays should
' be used to efficiently create multiple articles.
' Set the required properties for the Employee article.
article1.ConnectionContext = conn
article1.Name = articleName1
article1.DatabaseName = publicationDbName
article1.SourceObjectName = articleName1
article1.SourceObjectOwner = hrSchema
article1.PublicationName = publicationName
article1.Type = ArticleOptions.TableBased
' Define the parameterized filter clause based on Hostname.
article1.FilterClause = "Employee.LoginID = HOST_NAME()"
' Set the required properties for the SalesOrderHeader article.
article2.ConnectionContext = conn
article2.Name = articleName2
article2.DatabaseName = publicationDbName
article2.SourceObjectName = articleName2
article2.SourceObjectOwner = salesSchema
article2.PublicationName = publicationName
article2.Type = ArticleOptions.TableBased
' Set the required properties for the SalesOrderDetail article.
article3.ConnectionContext = conn
article3.Name = articleName3
article3.DatabaseName = publicationDbName
article3.SourceObjectName = articleName3
article3.SourceObjectOwner = salesSchema
article3.PublicationName = publicationName
article3.Type = ArticleOptions.TableBased
' Create the articles, if they do not already exist.
If article1.IsExistingObject = False Then
article1.Create()
End If
If article2.IsExistingObject = False Then
article2.Create()
End If
If article3.IsExistingObject = False Then
article3.Create()
End If
' Select published columns for SalesOrderHeader.
' Create an array of column names to vertically filter out.
' In this example, only one column is removed.
Dim columns() As String = New String(0) {}
columns(0) = "CreditCardApprovalCode"
' Remove the column.
article2.RemoveReplicatedColumns(columns)
' Define a merge filter clauses that filter
' SalesOrderHeader based on Employee and
' SalesOrderDetail based on SalesOrderHeader.
' Parent article.
filter12.JoinArticleName = articleName1
' Child article.
filter12.ArticleName = articleName2
filter12.FilterName = filterName12
filter12.JoinUniqueKey = True
filter12.FilterTypes = FilterTypes.JoinFilter
filter12.JoinFilterClause = filterClause12
' Add the join filter to the child article.
article2.AddMergeJoinFilter(filter12)
' Parent article.
filter23.JoinArticleName = articleName2
' Child article.
filter23.ArticleName = articleName3
filter23.FilterName = filterName23
filter23.JoinUniqueKey = True
filter23.FilterTypes = FilterTypes.JoinFilter
filter23.JoinFilterClause = filterClause23
' Add the join filter to the child article.
article3.AddMergeJoinFilter(filter23)
Catch ex As Exception
' Do error handling here and rollback the transaction.
Throw New ApplicationException( _
"The filtered articles could not be created", ex)
Finally
conn.Disconnect()
End Try
Этот пример меняет существующую статью слияния, чтобы связать обработчик бизнес-логики со статьёй. Для получения дополнительной информации см. sp_helpmergearticlecolumn (Transact-SQL)).
// Define the Publisher, publication, and article names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";
string articleName = "SalesOrderHeader";
// Set the friendly name of the business logic handler.
string customLogic = "OrderEntryLogic";
MergeArticle article = new MergeArticle();
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for the article.
article.ConnectionContext = conn;
article.Name = articleName;
article.DatabaseName = publicationDbName;
article.PublicationName = publicationName;
// Load the article properties.
if (article.LoadProperties())
{
article.ArticleResolver = customLogic;
}
else
{
// Throw an exception of the article does not exist.
throw new ApplicationException(String.Format(
"{0} is not published in {1}", articleName, publicationName));
}
}
catch (Exception ex)
{
// Do error handling here and rollback the transaction.
throw new ApplicationException(String.Format(
"The business logic handler {0} could not be associated with " +
" the {1} article.",customLogic,articleName), ex);
}
finally
{
conn.Disconnect();
}
' Define the Publisher, publication, and article names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"
Dim articleName As String = "SalesOrderHeader"
' Set the friendly name of the business logic handler.
Dim customLogic As String = "OrderEntryLogic"
Dim article As MergeArticle = New MergeArticle()
' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Set the required properties for the article.
article.ConnectionContext = conn
article.Name = articleName
article.DatabaseName = publicationDbName
article.PublicationName = publicationName
' Load the article properties.
If article.LoadProperties() Then
article.ArticleResolver = customLogic
Else
' Throw an exception of the article does not exist.
Throw New ApplicationException(String.Format( _
"{0} is not published in {1}", articleName, publicationName))
End If
Catch ex As Exception
' Do error handling here and rollback the transaction.
Throw New ApplicationException(String.Format( _
"The business logic handler {0} could not be associated with " + _
" the {1} article.", customLogic, articleName), ex)
Finally
conn.Disconnect()
End Try
Комментарии
Потокобезопасность
Любые публичные статические (Sharedв Microsoft Visual Basic) члены этого типа безопасны для многопоточных операций. Никакие члены экземпляра не гарантированы как потокобезопасные.
Конструкторы
| Имя | Описание |
|---|---|
| MergeArticle() |
Создает новый экземпляр класса MergeArticle. |
| MergeArticle(String, String, String, ServerConnection) |
Создаёт новый экземпляр MergeArticle класса с указанным именем, публикацией, базой данных и соединением с экземпляром Microsoft SQL Server. |
Свойства
| Имя | Описание |
|---|---|
| AllowInteractiveResolver |
Определяет, разрешать ли подпискам вызывать интерактивный резолвер при возникновении конфликтов во время синхронизации. |
| ArticleId |
Получает значение ID статьи. (Унаследовано от Article) |
| ArticleResolver |
Получает или устанавливает дружественное имя пользовательского разрешающего конфликтов или обработчика бизнес-логики, используемого при синхронизации статьи. |
| CachePropertyChanges |
Получает или задаёт, кэшировать ли изменения, внесённые в свойства репликации, или применять их сразу. (Унаследовано от ReplicationObject) |
| CheckPermissions |
Получает или устанавливает, как права проверяются у Publisher перед загрузкой изменений от подписчика. |
| ColumnTracking |
Определяет, как обнаруживают конфликты при синхронизации строк данных. |
| CompensateForErrors |
Определяет, выполняются ли компенсирующие действия при возникновении ошибок при синхронизации. |
| ConflictTable |
Получает название таблицы, используемой для отслеживания конфликтов, возникающих при синхронизации статьи слияния. |
| ConnectionContext |
Получает или устанавливает соединение с экземпляром Microsoft SQL Server. (Унаследовано от ReplicationObject) |
| CreateArticleAsHeterogeneous |
Получает или устанавливает значение, указывающее, нужно ли создавать статью как неоднородную. (Унаследовано от Article) |
| CreationScript |
Получает или задаёт имя и полный путь Transact-SQL скрипт-файла, который используется для создания объекта назначения у Подписчика. (Унаследовано от Article) |
| DatabaseName |
Получает или устанавливает имя базы данных, содержащей данные и объекты, опубликованные в статье. (Унаследовано от Article) |
| DeleteTracking |
Получает или задаёт, реплицируются ли удаления. |
| Description |
Получает или устанавливает текстовое описание статьи. (Унаследовано от Article) |
| DestinationObjectName |
Получает или устанавливает объект базы данных, который является исходным объектом базы данных для статьи, в адрес Subscriber. (Унаследовано от Article) |
| DestinationObjectOwner |
Получает или устанавливает владельца схемы исходного объекта базы данных для статьи в Subscriber. (Унаследовано от Article) |
| FilterClause |
Получает или устанавливает клаузу WHERE (Transact-SQL), которая вычисляется для горизонтальной фильтрации статьи. |
| IdentityRangeManagementOption |
Получает или устанавливает параметры управления диапазоном идентичности для статьи. (Унаследовано от Article) |
| IdentityRangeThreshold |
Получает или устанавливает значение, при котором новый диапазон значений столбцов идентичности присваивается Publisher или Subscriber. (Унаследовано от Article) |
| IsExistingObject |
Понимает, существует ли объект на сервере или нет. (Унаследовано от ReplicationObject) |
| MultipleColumnUpdate |
Получает или устанавливает значение, указывающее, нужно ли обновлять несколько столбцов. |
| Name |
Получает или устанавливает название статьи. (Унаследовано от Article) |
| PartitionOption |
Получает или устанавливает параметры фильтрации, когда статья фильтруется с помощью параметризованного строкового фильтра. |
| PreCreationMethod |
Получает или устанавливает действие, которое должно предпринять, если опубликованный объект уже существует в базе данных подписки. (Унаследовано от Article) |
| ProcessingOrder |
Получает или устанавливает порядок обработки статьи во время синхронизации. |
| PublicationName |
Получает или устанавливает название издания, к которому относится статья. (Унаследовано от Article) |
| PublisherIdentityRangeSize |
Получает или устанавливает диапазон значений идентичности, присваиваемых столбцам таблицы в Publisher. (Унаследовано от Article) |
| ResolverInfo |
Получает или устанавливает дополнительные данные и параметры, которые будут использоваться для разрешения конфликтов на базе COM. |
| SchemaOption |
Получает или устанавливает опции создания схемы для статьи. (Унаследовано от Article) |
| SnapshotObjectName |
Получает имя объекта базы данных, который представляет начальные данные снимка статьи. |
| SnapshotObjectOwner |
Получает владельца объекта базы данных, который представляет начальные данные снимков статьи. |
| SourceObjectName |
Получает или устанавливает имя объекта базы данных, который публикуется. (Унаследовано от Article) |
| SourceObjectOwner |
Получает или устанавливает владельца объекта базы данных, который публикуется. (Унаследовано от Article) |
| SqlServerName |
Получает имя экземпляра Microsoft SQL Server, к которому подключён этот объект. (Унаследовано от ReplicationObject) |
| Status |
Получает или устанавливает статус статьи слияния. |
| StreamBlobColumns |
Определяет, используется ли оптимизация потока данных при репликации столбцов бинарных больших объектов (BLOB). |
| SubscriberIdentityRangeSize |
Получает или устанавливает максимальное количество новых строк, которые могут быть вставлены в столбец идентичности в таблице у абонента, прежде чем должен быть выделен другой диапазон идентичности. (Унаследовано от Article) |
| SubscriberUploadOption |
Получает или устанавливает поведение обновлений, сделанных у абонента с клиентской подпиской. |
| Type |
Получает или устанавливает тип статьи. (Унаследовано от Article) |
| UserData |
Получает или устанавливает свойство объекта, позволяющее пользователям прикреплять к объекту свои собственные данные. (Унаследовано от ReplicationObject) |
| VerifyResolverSignature |
Получает или устанавливает опции для проверки цифровой подписи на COM-решателе конфликтов, чтобы определить, получена ли она от доверенного источника. |
| VerticalPartition |
Получает значение, указывающее, опубликованы ли все столбцы в таблице. (Унаследовано от Article) |
Методы
| Имя | Описание |
|---|---|
| AddMergeJoinFilter(MergeJoinFilter) |
Добавляет фильтр join в статью слияния. |
| AddReplicatedColumns(Array) |
Добавляет указанные столбцы в статью слияния. |
| ChangeMergeJoinFilter(MergeJoinFilter, MergeJoinFilter) |
Изменяет фильтр объединения, который определяется в статье слияния. |
| CheckValidCreation() |
Проверяет допустимое создание статьи. (Унаследовано от Article) |
| CheckValidDefinition(Boolean) |
Указывает, действительно ли определение. (Унаследовано от Article) |
| CommitPropertyChanges() |
Отправляет все кэшированные операторы изменения свойств на экземпляр Microsoft SQL Server. (Унаследовано от ReplicationObject) |
| Create() |
Создаёт новую статью о текущем подключенном экземпляре SQL Server на основе текущих свойств TransArticle объекта или объектаMergeArticle. (Унаследовано от Article) |
| Decouple() |
Отделяет объект репликации, на который связан, от сервера. (Унаследовано от ReplicationObject) |
| EnumMergeJoinFilters() |
Возвращает фильтры объединения, определённые для статьи слияния. |
| GetChangeCommand(StringBuilder, String, String) |
Возвращает команду изменения из репликации. (Унаследовано от ReplicationObject) |
| GetCreateCommand(StringBuilder, Boolean, ScriptOptions) |
Возвращает команду create из репликации. (Унаследовано от ReplicationObject) |
| GetDropCommand(StringBuilder, Boolean) |
Возвращает команду drop из репликации. (Унаследовано от ReplicationObject) |
| InitializeSharedPropertiesBasedOnExistingArticles() |
Указывает, нужно ли инициализировать общие свойства на основе существующих статей. |
| InternalRefresh(Boolean) |
Запускает внутреннее обновление после репликации. (Унаследовано от ReplicationObject) |
| ListReplicatedColumns() |
Возвращает столбцы, существующие в вертикально разбитой статье. |
| Load() |
Загружает свойства существующего объекта с сервера. (Унаследовано от ReplicationObject) |
| LoadProperties() |
Загружает свойства существующего объекта с сервера. (Унаследовано от ReplicationObject) |
| Refresh() |
Перезагружает свойства объекта. (Унаследовано от ReplicationObject) |
| Remove() |
Удаляет существующую статью о текущем подключённом экземпляре SQL Server на основе текущих свойств TransArticle объекта или объектаMergeArticle. (Унаследовано от Article) |
| RemoveMergeJoinFilter(String) |
Удаляет указанный фильтр слияния из статьи. |
| RemoveReplicatedColumns(Array) |
Удаляет существующие столбцы из вертикально разбитой статьи. |
| Script(ScriptOptions) |
Генерирует скрипт Transact-SQL, который можно выполнить для создания или удаления TransArticle объекта или MergeArticle объекта на сервере. (Унаследовано от Article) |
| ScriptMergeJoinFilter(MergeJoinFilter, ScriptOptions) |
Возвращает Transact-SQL скрипт фильтра слияния, прикреплённого к статье слияния. |