sql-server – 存储过程返回一行,记录集还是输出参数?

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

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

点赞