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-set1
和 Result-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
我正在尝试从结果集中一次提取一条记录以用作 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-set1
和 Result-set2
.
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