從效率和最佳實踐的角度來看,我很欣賞每個人的想法。循環存儲過程或客戶端代碼
我有一個存儲過程,使(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
方案二我會從客戶端應用程序代碼一旦調用存儲過程,並通過在複印張數作爲參數。
選項二似乎是我的最佳選擇,因爲它只導致一次數據庫調用。
我很欣賞你的想法,爲什麼你會更喜歡一個而不是另一個或任何最佳實踐建議。
當在sql land中時,認爲「基於集合」,在數據集上工作,只能循環作爲最後的手段。你需要有一個思路,我怎樣才能得到我需要的一組行,而不是像循環變量的程序那樣在循環中迭代。 – 2009-05-06 17:45:47