为事务性文章的数据更改设置传播方法

本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 为 SQL Server 2014 中事务文章的数据更改设置传播方法。

默认情况下,事务复制使用每个项目的一组存储过程将更改传播到订阅者。 可以将这些过程替换为自定义过程。 有关详细信息,请参阅 指定如何传播事务性文章的更改

本主题内容

在您开始之前

局限性与限制

  • 编辑复制生成的任何快照文件时,必须小心。 必须在自定义存储过程中测试和支持自定义逻辑。 Microsoft不支持自定义逻辑。

使用 SQL Server Management Studio

在“文章属性 - <文章>”对话框的“属性”选项卡上指定传播方法。这个对话框可在“新建发布向导”和“发布属性 - <发布>”对话框中找到。 有关使用向导和访问对话框的详细信息,请参阅 创建发布查看和修改发布属性

指定传播方法

  1. 在“新建发布向导”或“>”对话框的“项目”页上,选择一个表,然后单击“项目属性”。

  2. 单击“ 设置突出显示的表项目的属性”。

  3. 在“文章属性 - <文章>”对话框的“属性”选项卡上的“语句传递”部分中,使用INSERT 传递格式UPDATE 传递格式DELETE 传递格式菜单为每个操作指定传播方法。

  4. 单击 “确定”

  5. 如果位于 “发布属性 - <发布> ”对话框中,请单击“ 确定 ”以保存并关闭对话框。

生成和使用自定义存储过程

  1. 在“新建发布向导”或“>”对话框的“项目”页上,选择一个表,然后单击“项目属性”。

  2. 单击“ 设置突出显示的表项目的属性”。

    在“属性”选项卡的“文章属性 - <文章>”对话框的“语句传递”部分中,从相应的传递格式菜单中选择 CALL 语法(INSERT 传递格式UPDATE 传递格式DELETE 传递格式),然后在 INSERT 存储过程DELETE 存储过程UPDATE 存储过程中输入要使用的过程名称。 有关 CALL 语法的详细信息,请参阅 指定事务项目的更改传播方式中的“存储过程调用语法”部分。

  3. 单击 “确定”

  4. 如果位于 “发布属性 - <发布> ”对话框中,请单击“ 确定 ”以保存并关闭对话框。

  5. 生成发布快照后,它将包括你在上一步中指定的过程。 这些过程将使用指定的 CALL 语法,但将包含复制使用的默认逻辑。

    生成快照后,导航到本文所属发布的快照文件夹,找到与项目同名的 .sch 文件。 使用记事本或其他文本编辑器打开此文件,找到插入、更新或删除存储过程的 CREATE PROCEDURE 命令,并编辑过程定义以提供用于传播数据更改的任何自定义逻辑。 如果重新生成快照,则必须重新创建自定义过程。

使用 Transact-SQL

通过事务复制,你可以控制如何将更改从发布服务器传播到订阅服务器,并且当项目创建和更改以后使用复制存储过程时,可以通过编程方式设置此传播方法。

注释

可以为已发布数据行上发生的每种类型的 DML(数据操作语言)操作(插入、更新或删除)指定不同的传播方法。

有关详细信息,请参阅 指定如何传播事务性文章的更改

创建一篇使用 Transact-SQL 命令传播数据更改的文章

  1. 在发布服务器上,对发布数据库执行 sp_addarticle。 指定文章所属的出版物的名称、@article文章的名称、用于发布@source_object的数据库对象,以及以下至少一个参数的 SQL 值:

    • @ins_cmd - 控制 INSERT 命令的复制。

    • @upd_cmd - 控制 UPDATE 命令的复制。

    • @del_cmd - 控制 DELETE 命令的复制。

    注释

    为上述任何参数指定 SQL 值时,该类型的命令将作为相应的 Transact-SQL 命令复制到订阅服务器。

    有关详细信息,请参阅 定义项目

写一篇不传播数据变动的文章

  1. 在发布服务器上,对发布数据库执行 sp_addarticle。 指定文章所属的出版物名称为 @publication,文章名称为 @article,要发布的数据库对象为 @source_object,以及以下至少一个参数的值为 NONE

    • @ins_cmd - 控制 INSERT 命令的复制。

    • @upd_cmd - 控制 UPDATE 命令的复制。

    • @del_cmd - 控制 DELETE 命令的复制。

    注释

    为上述任何参数指定 NONE 值时,该类型的命令将不会复制到订阅服务器。

    有关详细信息,请参阅 定义项目

使用用户修改的自定义存储过程创建文章

  1. 在发布服务器上,对发布数据库执行 sp_addarticle。 指定文章所属出版物@publication的名称、文章名称为@article、要发布的数据库对象为@source_object,包括值0x02@schema_option位掩码(用于启用自定义存储过程的自动生成),以及以下至少一个参数:

    • @ins_cmd - 指定值为CALL sp_MSins_article_name,其中article_name@article指定的值。

    • @del_cmd - 指定 CALL sp_MSdel_article_nameXCALL sp_MSdel_article_name的值,其中 article_name 为 _*@article**指定的值。

    • @upd_cmd - 指定 SCALL sp_MSupd_article_nameCALL sp_MSupd_article_nameXCALL sp_MSupd__article_name*MCALL sp_MSupd_article_name的值,其中 article_name@article指定的值。

    注释

    对于上述每个命令参数,可以为复制生成的存储过程指定自己的名称。

    注释

    有关 CALL、SCALL、XCALL 和 MCALL 语法的详细信息,请参阅 指定如何传播事务项目的更改

    有关详细信息,请参阅 定义项目

  2. 生成快照后,导航到本文所属发布的快照文件夹,找到与项目同名的 .sch 文件。 使用 Notepad.exe打开此文件,找到插入、更新或删除存储过程的 CREATE PROCEDURE 命令,并编辑过程定义以提供任何自定义逻辑来传播数据更改。 有关详细信息,请参阅 指定如何传播事务性文章的更改

在自定义存储过程中使用自定义脚本创建文章以传播数据更改

  1. 在发布服务器上,对发布数据库执行 sp_addarticle。 指定文章所属的出版物名称为 @publication,文章名称为 @article,要发布的数据库对象为 @source_object@schema_option 位掩值含有 0x02(启用自定义存储过程的自动生成),以及以下至少一个参数:

    • @ins_cmd - 指定值为 CALL sp_MSins_article_name,其中 article_name 是为 @article指定的值。

    • @del_cmd - 指定 CALL sp_MSdel_article_nameXCALL sp_MSdel_article_name的值,其中 article_name 是为 @article指定的值。

    • @upd_cmd - 指定 SCALL sp_MSupd_article_nameCALL sp_MSupd_article_nameXCALL sp_MSupd_article_name、MCALLsp_MSupd_article_name 的值,其中article_name是为@article指定的值。

    注释

    对于上述每个命令参数,可以为复制生成的存储过程指定自己的名称。

    注释

    有关 CALL、SCALL、XCALL 和 MCALL 语法的详细信息,请参阅 指定如何传播事务项目的更改

    有关详细信息,请参阅 定义项目

  2. 在发布数据库上,使用 ALTER PROCEDURE 语句编辑 sp_scriptpublicationcustomprocs,以便返回用于插入、更新和删除自定义存储过程的 CREATE PROCEDURE 语句。 有关详细信息,请参阅 指定如何传播事务性文章的更改

更改现有文章的传播更改的方法

  1. 在发布者的发布数据库上,执行 sp_changearticle。 为@publication@articleins_cmdupd_cmddel_cmd指定@property值,并为@value指定适当的传播方法。

  2. 对要更改的每个传播方法重复步骤 1。

另请参阅

指定事务性文章的变更传播方式
创建发布