С точки зрения эффективности и лучших практик, я ценю все мысли.
У меня есть хранимая процедура, которая делает (n) копий строки и вставляет строку в необходимую таблицу.
Например. Сделайте копию предмета инвентаря и добавьте копии в инвентарь.
Я вижу две опции для этого типа хранимой процедуры.
Вариант 1:
CREATE PROCEDURE CopyInventory
@InventoryID int
AS
BEGIN
INSERT INTO Inventory (fieldOne, fieldTwo, FieldThree)
(SELECT FieldOne, FieldTwo, FieldThree FROM Inventory WHERE InventoryID = @InventoryID)
END
Используя первый вариант, я бы вызывал хранимую процедуру несколько раз из цикла while в коде клиентского приложения.
Вариант 2:
CREATE PROCEDURE CopyInventory
@InventoryID int,
@CopyCount int
AS
BEGIN
DECLARE @counter int
SET @counter = 0
WHILE @counter < @CopyCount
INSERT INTO Inventory (fieldOne, fieldTwo, FieldThree)
(SELECT FieldOne, FieldTwo, FieldThree FROM Inventory WHERE InventoryID = @InventoryID)
END
END
Используя второй вариант, я бы вызывал хранимую процедуру один раз из кода клиентского приложения и передавал счетчик копий в качестве параметра.
Второй вариант кажется мне лучшим, поскольку он приводит только к одному вызову базы данных.
Я ценю ваши мысли о том, почему вы бы предпочли одно другому или ни одно, а также рекомендации о наилучшей практике.