简述发布订阅中遇到的问题
问题一
数据同步过程中发现部分表未能同步
解决方案
检查发布属性,发现部分表没有设置主键,导致无法选中发布
无法选中表
修改表结构,设置主键(自增),再次查看发布属性,选中表,确定,重新初始化订阅
问题二
自检所有未见主键表,并自建
解决方案
# 单表 建 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)
网友评论