忽略ORM/NHibernate等。考慮傳遞唯一ID並從單行返回數據(如果找到ID)的常見要求。執行此操作的兩種方法是返回記錄集或使用輸出參數。存儲過程將從.NET C#代碼調用 - 因此從這個角度來看,需要使用ExecuteNonQuery設置/讀取附加參數,而另一個需要ExecuteScalar和訪問/讀取DataReader。Stored Proc返回一行,記錄集或輸出參數?
是否有過使用一個VS其他任何實際的好處?
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
我想我應該補充的評論,我總是者優先記錄方式,但只是因爲這是我原來學的方式。我可以看到的這種方法的一個好處是它抽象了底層的數據類型/大小。如果名稱在表內增加了大小,則需要在所有引用的地方修改輸出參數。 – 2010-09-17 10:37:59