【发布时间】:2009-05-06 16:48:41
【问题描述】:
从效率和最佳实践的角度来看,我很欣赏大家的想法。
我有一个存储过程,它制作 (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 领域中,考虑“基于集合”,处理数据集,仅循环作为最后的手段。你需要有这样的心态:我如何才能得到我需要的一组行,而不是像程序循环变量那样在循环中迭代。
标签: .net sql-server tsql stored-procedures