【发布时间】:2011-01-04 12:21:25
【问题描述】:
一个非常愚蠢的例子,但如果我需要从订单表中获取最大订单 ID,我有两个选项(我知道还有更多,但我只对这两个感兴趣)。我很想知道哪个最终会减少开销。
第一个简单地选择值的方法:
CREATE PROCEDURE GetLastOrderID
AS
SELECT Max(OrderID) FROM Orders
然后相应的C#代码创建一个SQLCommand来执行proc,调用.ExecuteScalar,并将值转换为一个int。
第二个将值作为输出参数传递出去
CREATE PROCEDURE GetLastOrderID (@MaxOrderID INT OUTPUT)
AS
SET @MaxOrderId = Max(OrderID) FROM Orders
然后对应的C#代码创建一个SQLCommand来执行proc,添加一个int类型的输出参数,然后调用.ExecuteNonQuery,最后得到输出参数的值。
两者之间有什么真正的好处吗?我的直觉是,第一个选项将花费更多时间/资源,因为没有给出明确的类型,但我很想知道是否有明确的答案。 (或者至少在权威方面胜过我的“直觉”)
【问题讨论】:
-
OPUTPUT参数意味着比构造和返回记录集更轻量级。我不知道多少。通过创建 2 个版本并循环调用它们应该很容易自己测试。 -
@Martin :它们更轻,但除非您多次调用,否则差异很小。