从存储过程返回值作为输出参数与SELECT语句

时间:2011-01-04 12:21:25

标签: c# .net tsql

一个非常愚蠢的例子,但如果我需要从订单表中获取最大订单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,最后得到输出参数的值。

一方面有什么真正的好处吗?我的直觉是,第一个选项需要更多的时间/资源,因为没有给出明确的类型,但我很想知道那里是否有明确的答案。 (或至少有一个在权威方面击败我的“直觉”)

2 个答案:

答案 0 :(得分:3)

没有

与在除少数行之外的任何内容上实际运行TSQL MAX()语句相比,您所指的开销是可以忽略不计的。

使用最易理解且最易维护的表格。

在发现性能问题时担心性能问题。

答案 1 :(得分:1)

输出参数更轻。