Sql 带Insert语句的CTE

Sql 带Insert语句的CTE,sql,tsql,Sql,Tsql,我以前在这段代码中得到过帮助,但现在我想将结果集添加到一个单独的表变量@check中,但由于Union语句,我无法确定在何处添加Insert语句 DECLARE @customer_dist TABLE ( [id] [INT] NOT NULL , [First_Name] [VARCHAR](50) NULL , [Last_Name] [VARCHAR](50) NULL , [DoB] [DATE] NULL ,

我以前在这段代码中得到过帮助,但现在我想将结果集添加到一个单独的表变量@check中,但由于Union语句,我无法确定在何处添加Insert语句

 DECLARE @customer_dist TABLE
    (
        [id] [INT] NOT NULL ,
        [First_Name] [VARCHAR](50) NULL ,
        [Last_Name] [VARCHAR](50) NULL ,
        [DoB] [DATE] NULL ,
        [post_code] [VARCHAR](50) NULL ,
        [mobile] [VARCHAR](50) NULL ,
        [Email] [VARCHAR](100) NULL
    );

INSERT INTO @customer_dist ( id ,
                             First_Name ,
                             Last_Name ,
                             DoB ,
                             post_code ,
                             mobile ,
                             Email )

select id, first_name, last_name, dob, post_code, mobile, email from checky where NID = 148575

 DECLARE @check TABLE
    (
        [id] [INT] NOT NULL ,
        [NID] [INT] NOT NULL 
    )



;with PairedRows as ( 
  select CDL.id as NId, CDR.id as Id
    from @customer_dist as CDL inner join
      @customer_dist as CDR on CDR.Id > CDL.Id and 
        CDR.First_Name = CDL.First_Name and CDR.Last_Name = CDL.Last_Name and CDR.DoB = CDL.DoB and 
        ( CDR.post_code = CDL.post_code or CDR.mobile = CDL.mobile or CDR.Email = CDL.Email ) 
    where not exists (
      select 42 from @customer_dist as NE where NE.ID < CDL.Id and 
        NE.First_Name = CDL.First_Name and NE.Last_Name = CDL.Last_Name and NE.DoB = CDL.DoB and
        ( NE.post_code = CDL.post_code or NE.mobile = CDL.mobile or NE.Email = CDL.Email ) ) )
  select NId, Id 
    from PairedRows
  union all
  select Min( NId ) as NID, Min( NId ) as Id 
    from PairedRows
    group by NId
  union all
  select id, id 
    from @customer_dist as CD
    where not exists ( select 42 from PairedRows as PR where PR.NId = CD.id or PR.Id = CD.id )
  order by NID, Id

我已经找到了添加它的位置,谢谢你的指点

;with PairedRows as ( 

  select CDL.id as NId, CDR.id as Id
    from @customer_dist as CDL inner join
      @customer_dist as CDR on CDR.Id > CDL.Id and 
        CDR.First_Name = CDL.First_Name and CDR.Last_Name = CDL.Last_Name and CDR.DoB = CDL.DoB and 
        ( CDR.post_code = CDL.post_code or CDR.mobile = CDL.mobile or CDR.Email = CDL.Email ) 
    where not exists (
      select 42 from @customer_dist as NE where NE.ID < CDL.Id and 
        NE.First_Name = CDL.First_Name and NE.Last_Name = CDL.Last_Name and NE.DoB = CDL.DoB and
        ( NE.post_code = CDL.post_code or NE.mobile = CDL.mobile or NE.Email = CDL.Email ) ) )
insert into @check
  select NId, Id 
    from PairedRows
union all
  select Min( NId ) as NID, Min( NId ) as Id 
    from PairedRows
    group by NId
union all
  select id, id 
    from @customer_dist as CD
    where not exists ( select 42 from PairedRows as PR where PR.NId = CD.id or PR.Id = CD.id )
order by NID, Id

我已经厌倦了在我的每一条Union语句之后添加它,但是我得到了错误无效的对象名称'PairedRows',对不起,前面的类型,但是错误仍然是一样的。首先,它在代码PairedRows的末尾有一个s,而不是PairedRows?其次,在进行任何联合选择之前,您应该只在表中插入一次。最后,如果您遇到错误,请向我们展示给出错误的代码。我的意思是,我已经尝试在联合体中的每个点添加insert语句,而不是同时添加所有语句。上面列出了失败的代码,它在从CTE插入到表中的过程中失败了。那么,确切地说,我说过要把它放在哪里?是的,但我想我在最初测试时一定是错了,我已经将你的答案标记为正确答案。
;with PairedRows as ( 

  select CDL.id as NId, CDR.id as Id
    from @customer_dist as CDL inner join
      @customer_dist as CDR on CDR.Id > CDL.Id and 
        CDR.First_Name = CDL.First_Name and CDR.Last_Name = CDL.Last_Name and CDR.DoB = CDL.DoB and 
        ( CDR.post_code = CDL.post_code or CDR.mobile = CDL.mobile or CDR.Email = CDL.Email ) 
    where not exists (
      select 42 from @customer_dist as NE where NE.ID < CDL.Id and 
        NE.First_Name = CDL.First_Name and NE.Last_Name = CDL.Last_Name and NE.DoB = CDL.DoB and
        ( NE.post_code = CDL.post_code or NE.mobile = CDL.mobile or NE.Email = CDL.Email ) ) )
insert into @check
  select NId, Id 
    from PairedRows
union all
  select Min( NId ) as NID, Min( NId ) as Id 
    from PairedRows
    group by NId
union all
  select id, id 
    from @customer_dist as CD
    where not exists ( select 42 from PairedRows as PR where PR.NId = CD.id or PR.Id = CD.id )
order by NID, Id