none
修改复制表的列类型失败 RRS feed

  • 问题

  • 环境:sql server 2005企业版 ,补丁打到sp4,windows 2003.

    一个发布中有很多个表,对某个表做列的修改,脚本如下:

    alter table Brand

    alter column BrandEnName nvarchar(80) not null ---原来类型为varchar

    报错:

    消息 4928,级别 16,状态 1,第 1 行

    无法更改列 'BrandEnName',因为它是 'REPLICATED'。

    但是我在测试环境中,数据库版本,windows版本都一致的情况下做测试,修改是成功的(订阅表的列的类型确实变成了nvarchar)

    后来把Brand表从发布的项目中移除,再去修改,还是报同样的错。这个我就很疑惑了。这个表没有做复制,为什么还是报错呢?大侠们给分析分析

    2014年2月19日 2:32

答案

  • 曾经偶尔遇到过这种情况,是从2000升级到 2005, 复制清理不干净

    可以使用 sys.tables 来查询一下表被同步使用的情况

    select * from sys.tables where name = 'Brand'

    is_published  对象为发布对象。
    is_schema_published 仅发布对象的架构。
    is_replicated  1 = 使用快照复制或事务复制发布表。
    has_replication_filter 1 = 表具有复制筛选器。
    is_merge_published 1 = 使用合并复制发布表。
    is_sync_tran_subscribed 1 = 使用立即更新订阅来订阅表
     

    2014年2月20日 1:04

全部回复

  • What kind of replication? Did you alter table on publisher or subscriber?
    2014年2月19日 3:09
  • 事务复制,在发布库上执行的
    2014年2月19日 7:38
  • Is the column BrandEnName part of fkey? If so, have to remove related tables from publication.
    2014年2月19日 14:06
  • 曾经偶尔遇到过这种情况,是从2000升级到 2005, 复制清理不干净

    可以使用 sys.tables 来查询一下表被同步使用的情况

    select * from sys.tables where name = 'Brand'

    is_published  对象为发布对象。
    is_schema_published 仅发布对象的架构。
    is_replicated  1 = 使用快照复制或事务复制发布表。
    has_replication_filter 1 = 表具有复制筛选器。
    is_merge_published 1 = 使用合并复制发布表。
    is_sync_tran_subscribed 1 = 使用立即更新订阅来订阅表
     

    2014年2月20日 1:04