忽略 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/