Was this page helpful?
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

MergeArticle.AddMergeJoinFilter Method (MergeJoinFilter)


Adds a join filter to the merge article.

Namespace:   Microsoft.SqlServer.Replication
Assembly:  Microsoft.SqlServer.Rmo (in Microsoft.SqlServer.Rmo.dll)

public void AddMergeJoinFilter(
	MergeJoinFilter mergeJoinFilter


Type: Microsoft.SqlServer.Replication.MergeJoinFilter

A MergeJoinFilter object value that specifies the merge join filter used to filter the article.

Calling the AddMergeJoinFilter method is equivalent to executing sp_addmergefilter (Transact-SQL).

The AddMergeJoinFilter method can be called only by members of the sysadmin fixed server role at the Publisher or by members of the db_owner fixed database role on the publication database.

// 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 = " +
string filterName23 = "SalesOrderDetail_SalesOrderHeader";
string filterClause23 = "SalesOrderHeader.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. 
	// Connect to the Publisher.

	// 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.

	// 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.

	// 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.
catch (Exception ex)
	// Do error handling here and rollback the transaction.
	throw new ApplicationException(
		"The filtered articles could not be created", ex);
Return to top
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
© 2015 Microsoft