sql-server - 存储过程返回一行、记录集或输出参数?

标签 sql-server stored-procedures

忽略 ORM/NHibernate 等。考虑传递唯一 ID 并从单行返回数据(如果找到 ID)的常见要求。执行此操作的两种方法是返回记录集或使用输出参数。存储过程将从 .NET C# 代码调用 - 因此从这个角度来看,一个需要使用 ExecuteNonQuery 设置/读取附加参数,而另一个需要 ExecuteScalar 和访问/读取 DataReader。

使用一种与另一种相比有什么真正的好处吗?

CREATE PROC GetUserByRecordSet
  @UserID UniqueIdentifier
AS
BEGIN
   SELECT 
      ID,
      Name,
      EmailAddress
   FROM
      [User]
   WHERE
      id = @UserID
END
GO

CREATE PROC GetUserByOutputParams
  @UserID UniqueIdentifier,
  @Name NVARCHAR(255) OUTPUT,
  @EmailAddress NVARCHAR(500) OUTPUT
AS
BEGIN
   SELECT 
      @Name =Name,
      @EmailAddress = EmailAddress
   FROM
      [User]
   WHERE
      id = @UserID
END
GO

最佳答案

这两种方法的主要区别在于灵活性。如果要更改返回的列,更改返回记录集的过程的工作量就会减少。

关于sql-server - 存储过程返回一行、记录集或输出参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734579/

相关文章:

sql - 找出哪些记录对的位置可以在一组组合记录中安全地切换

SQL DATEDIFF 结果与 Excel 的结果相差几小时

Mysql 存储过程 if (select....) > 变量 then

php - 存储过程在与 fetch_all 一起使用时导致 mysqli 出现问题

stored-procedures - 是否可以在 SQL 语句中调用过程?

mysql - 如何获取存储过程中 SELECT 中多个字段的值

sql - 将 DATETIME 舍入到午夜

java - JDBC 连接在同事的计算机上运行,​​而不是在我的计算机上

sql - 使用 SQL 查找序列中的 N 个元素

Mysql存储过程运行时报错