[英]Nested SQL Cursors
在我的产品表中,我有14种产品,在美国的每个州,每个产品都需要一行。 我正在尝试通过以下方法实现这一目标:
begin tran
declare @state varchar(2),
@productId int
declare stateCursor CURSOR FOR
select distinct [State]
from lookUpAreaFactor
declare productCursor CURSOR FOR
select distinct productid
from Product
open stateCursor
open productCursor
FETCH NEXT from stateCursor into @state
fetch next from productCursor into @productId
while @@FETCH_STATUS = 0
BEGIN
while @@FETCH_STATUS = 0
BEGIN
insert into ProductToState (ProductID,[State]) values (@productId,@state)
fetch next from productCursor into @productId
END
fetch next from stateCursor into @state
END
close stateCursor
close productCursor
select * from producttostate
rollback
它在第一个产品问世之后就轰炸了-但它甚至没有为所有50个州插入一行。 我可以用另一双眼睛-我在做什么错了?
为什么将游标用于基于集合的操作?
我认为此查询可以满足您的需求:
insert into ProductToState(ProductID, [State])
select ProductId, State
from (select distinct [State] from lookUpAreaFactor) s cross join
(select distinct ProductId from Product) p;
您需要使用游标吗? 如果您不这样做,则可以通过简单的交叉连接来实现
INSERT INTO ProductToState
( [STATE], productid )
SELECT DISTINCT s.[State], p.productid
FROM products p CROSS JOIN lookUpAreaFactor s
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.