簡述發(fā)布訂閱中遇到的問題
問題一
數(shù)據(jù)同步過程中發(fā)現(xiàn)部分表未能同步
解決方案
檢查發(fā)布屬性,發(fā)現(xiàn)部分表沒有設(shè)置主鍵寞蚌,導(dǎo)致無法選中發(fā)布
修改表結(jié)構(gòu)妓盲,設(shè)置主鍵(自增)超歌,再次查看發(fā)布屬性,選中表卖鲤,確定肾扰,重新初始化訂閱
問題二
自檢所有未見主鍵表,并自建
解決方案
# 單表 建 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
后續(xù)問題一
無 id
列集晚,或 id
列可為 NULL
,創(chuàng)建識別区匣,按提示修改即可
消息 1911偷拔,級別 16,狀態(tài) 1,第 1 行
列名 'id' 在目標(biāo)表或視圖中不存在条摸。
消息 1750悦污,級別 16,狀態(tài) 0钉蒲,第 1 行
無法創(chuàng)建約束切端。請參閱前面的錯誤消息。
消息 8111顷啼,級別 16踏枣,狀態(tài) 1,第 1 行
無法在表 'T_xxxx' 中可為 Null 的列上定義 PRIMARY KEY 約束钙蒙。
消息 1750茵瀑,級別 16,狀態(tài) 0躬厌,第 1 行
無法創(chuàng)建約束马昨。請參閱前面的錯誤消息。
后續(xù)問題二
主鍵列內(nèi)有重復(fù)數(shù)據(jù)
解決辦法
方案一扛施,檢查重復(fù)鸿捧,后續(xù)手動修改
SELECT COUNT(ID) AS '重復(fù)次數(shù)', ID
FROM T_xxxx
GROUP BY ID
HAVING (COUNT(*) > 1)
ORDER BY ID DESC
方案二,重置自增 ID
DBCC CHECKIDENT (T_xxxx,reseed,0)