语言

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

注解

线程安全性

任何此类公共静态(SharedMicrosoft Visual Basic)成员对多线程操作都是安全的。 不能保证任何实例成员是线程安全的。

构造函数

名称 说明
MergeArticle()

创建类的新实例 MergeArticle

MergeArticle(String, String, String, ServerConnection)

创建一个带有指定名称、发布、数据库及与 Microsoft SQL Server 实例连接的类的新实例MergeArticle

属性

名称 说明
AllowInteractiveResolver

在同步过程中发生冲突时,是否允许订阅调用交互式解析器。

ArticleId

获取文章ID值。

(继承自 Article)
ArticleResolver

获取或设置用于同步文章时使用的自定义冲突解决器或业务逻辑处理程序的友好名称。

CachePropertyChanges

获取或设置是缓存复制属性的更改,还是立即应用。

(继承自 ReplicationObject)
CheckPermissions

在订阅者上传更改前,获取或设置 Publisher 如何检查权限。

ColumnTracking

获取或设置在同步数据行时如何检测冲突。

CompensateForErrors

在同步过程中遇到错误时,是否采取补偿操作,是 get 或 set。

ConflictTable

获取用于跟踪合并文章同步时发生冲突的表名称。

ConnectionContext

获取或设置连接到 Microsoft SQL Server 实例。

(继承自 ReplicationObject)
CreateArticleAsHeterogeneous

获取或设置一个值,指示是否创建异构条目。

(继承自 Article)
CreationScript

获取或设置用于在订阅者创建目标对象的 Transact-SQL 脚本文件的名称和完整路径。

(继承自 Article)
DatabaseName

获取或设置包含文章中数据和对象的数据库名称。

(继承自 Article)
DeleteTracking

获取或设置删除是否被复制。

Description

获取或设置文章的文本描述。

(继承自 Article)
DestinationObjectName

在订阅者处获取或设置文章的源数据库对象。

(继承自 Article)
DestinationObjectOwner

在订阅者处获取或设置文章源数据库对象的模式所有者。

(继承自 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)

为合并文章添加了加入过滤器。

AddReplicatedColumns(Array)

将指定的列添加到合并条目中。

ChangeMergeJoinFilter(MergeJoinFilter, MergeJoinFilter)

更改合并文章中定义的连接过滤器。

CheckValidCreation()

检查有效的条目创建。

(继承自 Article)
CheckValidDefinition(Boolean)

表示该定义是否有效。

(继承自 Article)
CommitPropertyChanges()

将所有缓存的属性更改语句发送到Microsoft SQL Server实例。

(继承自 ReplicationObject)
Create()

基于当前连接的SQL Server实例,基于当前对象或对象MergeArticleTransArticle属性创建新条目。

(继承自 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()

根据当前对象或TransArticle对象的MergeArticle当前属性,删除当前连接的SQL Server实例的现有文章。

(继承自 Article)
RemoveMergeJoinFilter(String)

移除条目中指定的合并连接过滤器。

RemoveReplicatedColumns(Array)

删除垂直划分条目中的现有列。

Script(ScriptOptions)

生成一个 Transact-SQL 脚本,可用于创建或删除 TransArticle 服务器上的对象 MergeArticle 或对象。

(继承自 Article)
ScriptMergeJoinFilter(MergeJoinFilter, ScriptOptions)

返回附带于合并文章的合并合并过滤器的 Transact-SQL 脚本。

适用于

另请参阅