SQL同步主子表數據

--主表不同數據
select * from [bd]..TabA  where TabAID not in (select TabAID from [fwq]..TabA);
--子表不同數據
select b.* from [bd]..TabB b join [bd]..TabA a on a.TabAID=b.TabAID where a.TabAID not in (select TabAID from [fwq]..TabA));

--從本地同步到服務器 本地庫名:bd 服務器庫名:fwq 主表:TabA 子表:TabB   
declare @i  int=0;              --循環初始值
declare @j  int=0;              --循環總記錄數
declare @TabAID  int=0;             --主表主鍵
declare @newTabAID  int=0;          --插入後生成的主鍵
select @j = count(1) from [bd]..TabA where TabAID not in (select TabAID from [fwq]..TabA); 
--獲取最大的一條主表記錄
select top 1 @TabAID = TabAID from [bd]..TabA where TabAID not in (select TabAID from [fwq]..TabA) order by TabAID desc;
while @i<@j
    begin 
        --插入主表不同數據    
        insert into [fwq]..TabA    (TabAName,TabAOrder)
        select TabAName,TabAOrder from [bd]..TabA where TabAID = @TabAID;
        --返回主表主鍵
        select @newTabAID = @@IDENTITY;
        --輸出新舊主鍵
        select @TabAID 原主鍵,@newTabAID 新主鍵
        --根據主表主鍵,插入子表數據
        insert into [fwq]..TabB    (TabAID,TabBName,TabBOrder)
        select @newTabAID,TabBName,TabBOrder from [bd]..TabB where TabAID = @TabAID;
        --獲取下一條主表記錄(<@TabAID)
        select top 1 @TabAID = TabAID from [bd]..TabA  where TabAID not in (select TabAID from [fwq]..TabA) and TabAID < @TabAID order by TabAID desc 

        set @i=@i+1
    end; 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章