比较两个结构相同的表中,有多少数据一样,按行计数, 需要比对完全.

img

如果不分段对比,SQL server无法运行,但拆开分段,这个脚码又出现结果缺失,不完整,比对相同的数据不完整.请问: 问题出在哪里,如何修改脚本,学习中.请 指点迷津

双循环的话可以这样写,效率应该不好,没验证过


DECLARE @SNO INT = 1;
WHILE @SNO < 11
    BEGIN
        DECLARE @GroupID INT = 1;
        WHILE @GroupID < 11
            BEGIN
                INSERT INTO Result007
                SELECT  NoText
                FROM    AAA a
                WHERE   EXISTS (   SELECT   1
                                   FROM     BBB b
                                   WHERE    a.NoText = b.NoText
                                            AND b.KID BETWEEN (1 + 40642560 * (@SNO - 1)) AND 40642560 * @SNO)
                        AND a.ID BETWEEN (1 + 54396352 * (@GroupID - 1)) AND 54396352 * @GroupID;
                SET @GroupID = @GroupID + 1;
            END;
        SET @SNO = @SNO + 1;
    END;

有运行效率要求吗?

# 找到所有字段,并列出
select id,rid 
from (
    select *,row_number() over(partition by 字段1,字段2,字段3..... order by getdate()) rid 
    from (
        select 字段1,字段2,字段3.....
        from 表A 
        where 范围
        union all 
        select 字段1,字段2,字段3.....
        from 表B 
        where 范围
    ) a
) a
where rid>1


双循环,由现在的循环10次变成循环100次,10段*10段,执行代码是这样的,肯定有问题,需要修改

 
DECLARE @SNO INT = 1;
WHILE @SNO<11
DECLARE @GroupID INT = 1;
WHILE @GroupID<11
BEGIN
 
INSERT INTO Result007
select NoText FROM  AAA a
where exists (  select 1 FROM BBB b WHERE a.NoText = b.NoText 
AND B.KID BETWEEN (1+40642560*(@SNO-1)) AND 40642560*@SNO   )
AND A.ID BETWEEN (1+54396352*(@GroupID-1)) AND 54396352*@GroupID;
 
SET @GroupID=@GroupID+1
END;