计算列

时间:2016-04-21 07:31:52

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

所以情况是有两个服务器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的脚本时,我在Replication Monitor中收到错误。

错误: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

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

请帮忙!

2 个答案:

答案 0 :(得分:1)

大多数作品都不适用于计算列。这就是更新。 我建议不要复制计算列。您可以在复制数据库中再次计算它。

其他方法是将计算列作为实际列,然后复制。

如果要插入计算列,则可以使kind属性等于PersistantReadOnly。

答案 1 :(得分:0)

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