Select 或使用光标在 Table 中插入数据

Select Or Insert Data In Table Using Cursor

我正在尝试从结果集中一次提取一条记录以用作 Select 在 Table 中插入数据的语句中的值。

select [Id] 
from TBL 
where PId = '123' 
order by value

结果集 1

222
333
444
555

查询#2:

select [Id] 
from TBL 
where PId = '456' 
order by value

结果集 2

666
777
888
999

最后,我试图通过从 Result-set1Result-set2.

中获取值来将数据插入 table
insert into TBL ([Val], [Disp], [Seq], [Active], [DId], [PId])
    select [Val], [Disp], [Seq], [Active], 'One Record From Result-set1', '1111' 
    from TBL 
    where PId = '2222' 
      and DId = 'One Record From Result-set2'

我读到游标有助于一次从结果集中提取一条记录,但我不确定如何在我的场景中实现它。

insert into TBL ([Val], [Disp], [Seq], [Active], [DId], [PId])
    select [Val], [Disp], [Seq], [Active], '222', '1111' 
    from TBL 
    where PId = '2222' 
      and DId = '666'

我正在尝试摆脱硬编码 222 和 666。

假设您的两个查询 return 相同数量的记录(这是一个很大的假设),您可以使用由行号创建的 Id 连接两个数据集。 然后,您可以使用笛卡尔积在 table 中插入与查询结果 return 一样多的记录。

insert into TBL ([Val], [Disp], [Seq], [Active], [DId], [PId])
select [Val], [Disp], [Seq], [Active], cj.Id1, '1111' 
from TBL 
  cross join (
    select rs1.[Id] Id1, rs2.[Id] Id2
    from (    
      select 
        row_number() over (partition by (select null) order by value) rn,
        [Id] 
      from TBL where PId = '123'
    ) rs1
    join (
      select 
        row_number() over (partition by (select null) order by value) rn,
        [Id] 
      from TBL where PId = '456'
    ) rs2
  on rs1.rn=rs2.rn
  ) cj
where PId = '2222' 
  and DId = cj.Id2