默认情况下,事务复制通过发布中每个表项目的内部过程生成的存储过程在订阅服务器上进行所有数据更改。 这三个过程(每个用于插入、更新和删除的过程)将复制到订阅服务器,并在将插入、更新或删除复制到订阅服务器时执行。 对 SQL Server 发布服务器上的表进行架构更改时,复制会通过调用同一组内部脚本过程自动重新生成这些过程,以便新过程与新架构匹配(Oracle 发布服务器不支持架构更改复制)。
还可以指定自定义过程来替换一个或多个默认过程。 如果架构更改会影响该过程,则应更改自定义过程。 例如,如果过程引用架构更改中删除的列,则应从过程中删除对该列的引用。 复制有两种方式可以将新的自定义过程传播到订阅者:
第一个选项是使用自定义脚本过程替换复制使用的默认值:
执行 sp_addarticle(Transact-SQL)时,请确保 @schema_option 0x02位为 true。
执行 sp_register_custom_scripting(Transact-SQL), 并为参数 @type 指定“insert”、“update”或“delete”的值,以及参数 @value的自定义脚本过程的名称。
下次进行架构更改时,复制将调用此存储过程来编写新用户定义的自定义存储过程的定义脚本,然后将该过程传播到每个订阅服务器。
第二个选项是使用包含新的自定义过程定义的脚本:
执行 sp_addarticle(Transact-SQL)时,请将 @schema_option 0x02位设置为 false ,因此复制不会在订阅服务器上自动生成自定义过程。
在每个架构更改之前,请创建一个新的脚本文件,并通过执行 sp_register_custom_scripting(Transact-SQL)将脚本注册到复制。 为参数 @type 指定值“custom_script”,并为参数 @value在发布服务器上指定脚本的路径。
下次进行相关的架构更改时,此脚本会在与 DDL 命令相同的事务中的每个订阅服务器上执行。 更改架构后,将取消注册脚本。 必须重新注册脚本,使其在后续架构更改后执行。