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

标签 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,最后得到输出参数的值。

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

最佳答案

没有。

与实际运行 TSQL MAX() 语句相比,除了少量行之外,您所指的开销可以忽略不计。

使用最容易理解和最易于维护的形式。

当您发现性能问题时,请担心性能。

关于c# - 从存储过程返回值作为输出参数与 SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4593492/

相关文章:

c# - 最佳实践 : Persisting data throughout multiple web method calls

sql - 如何对具有多个条目的一列使用分组依据?

sql-server - 如何创建一个列,该列是另一列中文本的 0-9 哈希值?

c# - 使 Linq to Sql 使用 ISNULL 而不是 COALESCE 生成 T-SQL

c# - 单击按钮时动态添加的文本框为空

c# - 为什么 ReSharper 建议我使类型参数 T 逆变?

c# - 播放背景音乐地铁应用

c# - .NET Singleton 长时间运行的秒表实例

c# - 如何动态包含外部文件/用户控件?

c# - 如何在不声明模板标签的情况下制作带子控件的控件?