22,301
社区成员




newABid = row_number()over(order by Id) * ident_incr('HD1.dbo.AB') + @curident
declare @a table(id int,Uid varchar(20),Value int)
DECLARE @b TABLE(ABid INT,VALUE INT)
insert @a select A.* from HD2.dbo.AB A Left Join HD1.dbo.AB B ON A.Uid=B.Uid and B.Uid is NULL
insert HD1.dbo.AB(Uid,Value) select Uid,Value from @a
insert @b SELECT A.ABid,A.Value from HD2.dbo.AC A inner join @a B on A.ABid=B.id
UPDATE C SET ABid=A.id from HD1.dbo.AB A inner join @a B
on A.Uid=B.Uid inner JOIN @b C ON B.id=C.ABid
INSERT HD1.dbo.AC(ABid,Value) SELECT * FROM @b
-- 获取HD1.dbo.AB当前标识
declare @curident int
set @curident=ident_current('HD1.dbo.AB')
-- 利用row_number影射新的ABid, 插入AC
;with cte as
(
select newABid = row_number()over(order by Id)+@curident, * from HD2.dbo.AB t where not exists (select 1 from HD1.dbo.AB where Uid=t.Uid)
)
insert HD1.dbo.AC select a.newABid, b.Value from cte a join HD2.dbo.AC on a.Id=b.ABid
-- 插入AB
insert HD1.dbo.AB select Uid, Value from HD2.dbo.AB t
where not exists (select 1 from HD1.dbo.AB where Uid=t.Uid)
order by Id
DECLARE @max INT
SELECT @max = MAX(id) FROM HD1.dbo.AB
INSERT INTO HD1.dbo.AB(Uid,[VALUE])
SELECT a.Uid,a.[VALUE] FROM
HD2.dbo.AB a WHERE
NOT EXISTS
( SELECT * FROM HD1.dbo.AB c WHERE c.Uid = a.Uid)
INSERT INTO HD1.dbo.AC(ABid,[VALUE])
SELECT c.id,b.[VALUE] FROM
HD2.dbo.AB a JOIN HD2.dbo.AC b ON a.id = b.ABid JOIN HD1.dbo.AB c ON a.Uid = c.Uid
WHERE c.id > @max
----导入AB
INSERT INTO HD1.dbo.AB
SELECT * FROM HD2.dbo.AB d2
WHERE uid NOT IN (SELECT distinct uid FROM HD1.dbo.AB)
----导入AC
INSERT INTO HD1.dbo.AC
SELECT * FROM HD2.dbo.AC d2
WHERE ABid NOT IN (SELECT distinct ABid FROM HD1.dbo.AC)
insert into hd1.dbo.ab select id,uid,value from hd2.dbo.ab where uid not in (select uid from hd1.dbo.ab)
insert into hd1..ab (uid,value) select uid,value from hd2..ab where hd1..ab.uid <>hd2..ab.uid and hd1..ab.value <>hd2..ab.value