Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie man einen Datensatz in SQL Server besser dupliziert

Warum schließen Sie sich nicht dem FruitName an, um einen Tisch mit alten und neuen FruitIds zu bekommen? In Anbetracht der Tatsache, dass gleichzeitig Informationen hinzugefügt werden würden ... ist dies möglicherweise nicht die beste Option, aber Sie werden keine Zyklen verwenden.

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