为事务项目的数据更改设置传播方法

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

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

本主题内容

开始之前

限制和局限

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

使用 SQL Server Management Studio

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

指定传播方法

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

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

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

  4. 单击“确定”。

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

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

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

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

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

  3. 单击“确定”。

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

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

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

“使用 Transact-SQL”

通过事务复制,您可以控制如何将更改从发布服务器传播到订阅服务器,而这种传播方法可以在创建和之后更改项目时使用复制存储过程以编程的方式进行设置。

注意

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

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

创建使用 Transact-SQL 命令传播数据更改的项目

  1. 在发布服务器上,对发布数据库执行 sp_addarticle。 为 @publication 指定项目所属的发布的名称,为 @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 发布的数据库对象、包含值@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*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_nameMCALL sp_MSupd_article_name 的值,其中 article_name 是为 @article 指定的值。

    注意

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

    注意

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

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

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

更改为现有项目传播更改的方法

  1. 在发布服务器上,对发布数据库执行 sp_changearticle为@property指定@publication@article、值ins_cmd、upd_cmddel_cmd,并为@value指定适当的传播方法。

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

另请参阅

指定如何传播事务项目的更改
创建发布