查看和修改项目属性

本主题介绍如何使用 SQL Server Management Studio、Transact-SQL 或复制管理对象(RMO)查看和修改 SQL Server 2014 中的项目属性。

本主题内容

在您开始之前

局限性与限制

  • 某些属性在创建发布后无法修改,如果存在发布订阅,则不能修改其他属性。 无法修改的属性显示为只读。

建议

使用 SQL Server Management Studio

“发布属性 - <发布>”对话框中查看和修改文章属性,该对话框可在 Microsoft SQL Server Management Studio 和复制监视器中使用。 有关启动复制监视器的信息,请参阅 “启动复制监视器”。

  • 常规 ”页包括发布名称和说明、数据库名称、发布类型以及订阅过期设置。

  • 项目 ”页对应于“新建发布向导”中的“ 项目 ”页。 使用此页可添加和删除项目,以及更改项目的属性和列筛选。

  • 筛选行”页面对应于“新建发布向导”中的“筛选表行”页面。 使用此页可为所有类型的发布添加、编辑和删除静态行筛选器,以及添加、编辑和删除合并发布的参数化行筛选器和联接筛选器。

  • 快照 ”页允许你指定快照的格式和位置、是否应压缩快照,以及应用快照之前和之后要运行的脚本。

  • FTP 快照页(适用于快照和事务性发布,以及针对运行 SQL Server 2005 之前版本的发布服务器的合并发布)允许您指定订阅者是否可以通过文件传输协议(FTP)下载快照文件。

  • FTP 快照和 Internet 页面(适用于运行 SQL Server 2005 或更高版本的发布服务器进行合并发布)允许您指定订阅者是否可以通过 FTP 下载快照文件,以及订阅者是否可以通过 HTTPS 同步订阅。

  • 订阅选项” 页允许设置应用于所有订阅的多个选项。 选项因发布类型而异。

  • " 发布访问列表 "页面允许您指定哪些登录名和组可以访问某一发布。

  • 代理安全”页允许您访问以下代理运行的帐户设置,并实现与复制拓扑中计算机的连接:用于所有发布的快照代理;用于所有事务性发布的日志读取器代理;以及用于允许排队更新订阅的事务性发布的队列读取器代理。

  • “数据分区”页(用于运行 SQL Server 2005 或更高版本的发布服务器的合并发布)允许您指定是否允许具有参数化筛选器的订阅服务器在没有可用快照时请求生成快照。 它还允许您为一个或多个分区生成快照,可以选择一次性生成或按定期计划生成。

查看和修改项目属性

  1. “发布属性 - <发布>”对话框的“项目”页上,选择一篇文章,然后单击“项目属性”。

  2. 选择要对哪些文章应用属性更改:

    • 单击“ 设置突出显示 <的 ObjectType> 项目的属性 ”以启动 “项目属性 - <ObjectName> ”对话框;此对话框中所做的属性更改仅应用于“ 项目 ”页上的对象窗格中突出显示的对象。

    • 单击设置所有<ObjectType>文章属性,以启动所有<ObjectType>文章属性对话框;在该对话框中进行的属性更改将应用于“文章”页上的对象窗格中该类型的所有对象,包括尚未选定发布的对象。

      注释

      所有 <ObjectType> 项目的属性 ”对话框中所做的属性更改将替代之前在 “项目属性 - <ObjectName> ”对话框中所做的任何更改。 例如,如果想要为对象类型的所有项目设置许多默认值,但还希望为单个对象设置一些属性,请先为所有项目设置默认值。 然后设置各个对象的属性。

  3. 根据需要修改任何属性,然后单击“ 确定”。

  4. 单击“发布属性 - <发布>”对话框上的“确定”。

使用 Transact-SQL

可以使用复制存储过程以编程方式修改文章及返回其属性。 使用的存储过程取决于项目所属的发布类型。

查看属于快照或事务发布的项目的属性

  1. 执行 sp_helparticle,为 @publication 参数指定发布的名称,并为 @article 参数指定项目的名称。 如果未指定 @article,则会为发布中的所有项目返回信息。

  2. 对表文章执行 sp_helparticlecolumns ,以列出基表中可用的所有列。

修改属于快照或事务发布的项目的属性

  1. 执行 sp_changearticle,指定要在 @property 参数中更改的项目属性,并在 @value 参数中指定此属性的新值。

    注释

    如果更改需要生成新快照,则还必须为@force_invalidate_snapshot指定值 1,如果更改要求重新初始化订阅服务器,则还必须为 @force_reinit_subscription 指定值 1。 有关更改时需要新快照或重新初始化的属性的详细信息,请参阅更改发布和文章属性

查看合并发布中的文章属性

  1. 执行 sp_helpmergearticle,指定 @publication 参数的发布的名称和 @article 参数的项目的名称。 如果未指定这些参数,则会为出版物或出版商中的所有文章返回信息。

  2. 对表文章执行 sp_helpmergearticlecolumn,列出基表中的所有可用列。

修改属于合并发布的项目的属性

  1. 执行 sp_changemergearticle,指定要在 @property 参数中更改的项目属性,并在 @value 参数中指定此属性的新值。

    注释

    如果更改需要生成新快照,则还必须为@force_invalidate_snapshot指定值 1,如果更改要求重新初始化订阅服务器,则还必须为 @force_reinit_subscription 指定值 1。 有关更改时需要新快照或重新初始化的属性的详细信息,请参阅更改发布和文章属性

示例 (Transact-SQL)

此事务复制示例返回已发布项目的属性。

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorks2012]
EXEC sp_helparticle
  @publication = @publication;
GO

此事务复制示例更改已发布项目的架构选项。

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 [AdventureWorks2012]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

此合并复制示例返回已发布项目的属性。

DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';

USE [AdventureWorks2012]
EXEC sp_helpmergearticle
  @publication = @publication;
GO

此合并复制示例更改已发布项目的冲突检测设置。

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2012]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

使用复制管理对象 (RMO)

可以使用复制管理对象(RMO)以编程方式修改项目并访问其属性。 用于查看或修改项目属性的 RMO 类取决于项目所属的发布类型。

查看或修改属于快照发布或事务性发布的文章属性

  1. 使用 ServerConnection 类创建与发布服务器的连接。

  2. 创建 TransArticle 类的一个实例。

  3. 设置 NamePublicationNameDatabaseName 属性。

  4. ConnectionContext 属性设置步骤 1 中的连接。

  5. 调用 LoadProperties 方法获取该对象的属性。 如果此方法返回 false,则步骤 3 中的项目属性定义不正确或项目不存在。

  6. (可选)若要更改属性,请为可设置的属性 TransArticle 之一设置一个新值。

  7. (可选)如果已将 true 的值指定为 CachePropertyChanges,则调用 CommitPropertyChanges 方法以在服务器上提交更改。 如果将 false 的值指定为 CachePropertyChanges(默认值),则会将更改立即发送到服务器。

查看或修改属于合并发布的项目的属性

  1. 使用 ServerConnection 类创建与发布服务器的连接。

  2. 创建 MergeArticle 类的一个实例。

  3. 设置 NamePublicationNameDatabaseName 属性。

  4. ConnectionContext 属性设置步骤 1 中的连接。

  5. 调用 LoadProperties 方法获取该对象的属性。 如果此方法返回 false,则步骤 3 中的项目属性定义不正确或项目不存在。

  6. (可选)若要更改属性,请为可设置的属性 MergeArticle 之一设置一个新值。

  7. (可选)如果已将 true 的值指定为 CachePropertyChanges,则调用 CommitPropertyChanges 方法以在服务器上提交更改。 如果将 false 的值指定为 CachePropertyChanges(默认值),则会将更改立即发送到服务器。

示例(RMO)

本示例更改合并项目以指定项目使用的业务逻辑处理程序。

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

另请参阅

为合并项目实现业务逻辑处理程序
发布数据和数据库对象
更改发布和项目属性
复制系统存储过程概念
高级合并复制冲突检测与解决