首页 > 解决方案 > MS SQL Server - 复制数据库的初始数据匿名化

问题描述

我有 2 个 SQL Server 数据库 - 发布者和订阅者。由于订阅者被用于统计,我必须为一些记录提供匿名化。

我的想法是:

使用这种方法,每次将新记录插入表中时,SQL Server 都会将其匿名版本插入订阅者数据库 - 复制使用自定义过程。

但是,这里的初始加载(快照复制)是一个问题,因为存储过程是在该过程中以原始形式创建的。我知道我可以执行快照复制,然后运行一些带有匿名逻辑的脚本,但是我宁愿避免这种情况。

我的问题:

或者也许你知道另一种解决方案,我应该尝试不同的方法?我不确定是否需要代码:

示例文章:

EXEC sp_addarticle @publication = N'ProjectPublication',
                   @article = N'table_name',
                   @source_owner = N'projecttst',
                   @source_object = N'table_name',
                   @type = N'logbased',
                   @description = NULL,
                   @creation_script = NULL,
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x000000000803509F,
                   @identityrangemanagementoption = N'manual',
                   @destination_table = N'table_name',
                   @destination_owner = N'projecttst',
                   @vertical_partition = N'false',
                   @ins_cmd = N'CALL sp_MSins_projecttsttable_name',
                   @del_cmd = N'CALL sp_MSdel_projecttsttable_name',
                   @upd_cmd = N'SCALL sp_MSupd_projecttsttable_name';

原始程序和修改程序:

ALTER PROCEDURE [dbo].[sp_MSins_projecttsttable_name]
    @c1 numeric(19,0),
    @c2 nvarchar(255)
AS
BEGIN
    INSERT INTO [projecttst].[table_name] ([col1], [col2]) 
    VALUES (@c1, @c2) 
END

ALTER PROCEDURE [dbo].[sp_MSins_projecttsttable_name]
    @c1 numeric(19,0),
    @c2 nvarchar(255)
AS
BEGIN
    INSERT INTO [projecttst].[table_name] ([col1], [col2]) 
    VALUES (@c1, 'ANONYMIZED') 
END

提前致谢。

标签: sql-serverdatabasesql-server-2012replicationtransactional-replication

解决方案


推荐阅读