पुराने और नए FruitId के साथ तालिका प्राप्त करने के लिए आप FruitName में क्यों शामिल नहीं होते? जानकारी को ध्यान में रखते हुए एक ही समय में जोड़ा जाएगा .... यह सबसे अच्छा विकल्प नहीं हो सकता है लेकिन आप किसी भी चक्र का उपयोग नहीं करेंगे।
INSERT INTO BASKET(BASKETNAME)
VALUES ('COPY BASKET')
DECLARE @iBasketId int
SET @iBasketId = @@SCOPE_IDENTITY;
insert into Fruit (BasketId, FruitName)
select @iBasketId, FruitName
from Fruit
where BasketId = @originalBasket
declare @tabFruit table (originalFruitId int, newFruitId int)
insert into @tabFruit (originalFruitId, newFruitId)
select o.FruitId, n.FruitId
from (SELECT FruitId, FruitName from Fruit where BasketId = @originalBasket) as o
join (SELECT FruitId, FruitName from Fruit where BasketId = @newBasket) as n
on o.FruitName = n.FruitName
insert into Property (FruitId, PropertyText)
select NewFruitId, PropertyText
from Fruit f join @tabFruit t on t.originalFruitId = f.FruitId