【问题标题】:Replication Issue with computed columns计算列的复制问题
【发布时间】:2016-04-21 07:31:51
【问题描述】:

所以情况是有两个服务器pub_server(发布者)和sub_server(订阅者)。 pub_server 上有两个数据库:db1db2

在 db1 中有一个表 xyz_tbl,它被复制(事务)到 sub_server(发布者名称:publisher_old)。 我的任务是从publisher_old 删除订阅和文章,并在db2 上创建一个新的发布者publisher_new,其中包含相同的文章xyz_tbl 和相同的订阅者sub_server

现在问题来了:xyz_tbl 有一个计算列。因此,当我为 publisher_new 执行脚本时,我在复制监视器中出现错误。

错误:The column "column_name" cannot be modified because it is either a computed column or is the result of a UNION operator

我正在使用@sync_type="replication support only",因为表已经存在于订阅者(来自publisher_old)。那么为什么分发者试图对产生上述错误的订阅者执行插入。

如果分发者正在尝试插入,那么复制是如何从db1 进行的,即publisher_old

如何处理复制中的计算列。我找不到任何答案。

请帮忙!

【问题讨论】:

    标签: sql-server sql-server-2008 database-replication


    【解决方案1】:

    大部分作品不适用于计算列。正在更新。 我建议不要复制计算列。您可以在复制数据库中再次计算它。

    另一种方法是使计算列成为实际列,然后复制。

    如果你想插入计算列,那么你可以让 kind 属性等于 PersistantReadOnly。

    【讨论】:

    • 我们如何设置 PersistantReadOnly 属性?
    【解决方案2】:

    但是,如果计算列在复制中持久存在未复制,因为其他对象的定义复制失败,如果添加,则应在 bcp 之前将其删除。最后,您只能通过在发布者上创建(dop 和重新创建)和复制位来将它们添加到订阅者上,然后您可能会遇到 FK 和索引的问题。

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      相关资源
      最近更新 更多