03-Sql Server 集群-数据同步补充

2020-04-13  本文已影响0人  过桥

简述发布订阅中遇到的问题

问题一

数据同步过程中发现部分表未能同步

解决方案

检查发布属性,发现部分表没有设置主键,导致无法选中发布


无法选中表

修改表结构,设置主键(自增),再次查看发布属性,选中表,确定,重新初始化订阅

问题二

自检所有未见主键表,并自建

解决方案

    # 单表 建 id 主键 
    alter table xxx add constraint PK_xxx_ID primary key (id)
    # 检查所有表,自建主键
    declare @tablename sysname   
     
    declare @strsql nchar(500)   
     
    declare tableNameCursor cursor for  
     
    select b.name from sysobjects b where xtype='U' and  b.name not in   
     
    (select object_name(a.parent_obj)  from sysobjects a where xtype='PK' )   
     
    open tableNameCursor     
     
    fetch next from tableNameCursor into @tablename   
     
    while @@FETCH_STATUS = 0   
     
    begin  
     
    print @tablename   
     
    set @strsql= 'alter table [' + @tablename + '] add constraint PK_' + @tablename + '_ID primary key (id) '  
     
    print @strsql   
     
    exec (@strsql)   
     
    fetch next from tableNameCursor into @tablename   
     
    end  
     
    close tableNameCursor   
     
    deallocate  tableNameCursor 
后续问题一

id 列,或 id 列可为 NULL,创建识别,按提示修改即可

消息 1911,级别 16,状态 1,第 1 行
列名 'id' 在目标表或视图中不存在。
消息 1750,级别 16,状态 0,第 1 行
无法创建约束。请参阅前面的错误消息。

消息 8111,级别 16,状态 1,第 1 行
无法在表 'T_xxxx' 中可为 Null 的列上定义 PRIMARY KEY 约束。
消息 1750,级别 16,状态 0,第 1 行
无法创建约束。请参阅前面的错误消息。
后续问题二

主键列内有重复数据

解决办法

方案一,检查重复,后续手动修改

SELECT   COUNT(ID) AS '重复次数', ID
FROM      T_xxxx
GROUP BY ID
HAVING   (COUNT(*) > 1)
ORDER BY ID DESC

方案二,重置自增 ID

DBCC CHECKIDENT (T_xxxx,reseed,0)
上一篇下一篇

猜你喜欢

热点阅读