我有一个一般性问题,即是否可以做某事 - 以及这是否是最有效的方法!
总结一下:我可以将对象集合作为参数传递给存储过程吗?
假设我有一个名为的 SQL Server 表Users [UserID, Forename, Surname]
另一个表称为Hobbies [HobbyID, UserID, HobbyName, HobbyTypeID]
此设置是为了记录用户的多种爱好。
在我的应用程序中,我想更新用户记录。
通常 - 我会更新用户表,然后在代码中循环遍历每个爱好并逐条记录更新爱好表。
如果我要更新用户名字和 2 个爱好,则需要对数据库进行 3 次调用。
(1 次调用存储过程来更新名字/姓氏,2 次调用存储过程来更新 2 条爱好记录)
我的问题是:
我可以通过将所有参数传递给 1 个存储过程来仅对数据库进行 1 次调用吗?
eg.
intUserID = 1
strForename = "Edward"
strSurname = "ScissorHands"
dim objHobbyCollection as New List(Of Hobby)
'Assume that I have 2 hobby objects, each with their hobbyID, UserID, HobbyName & HobbyTypeID
Dim params As SqlParameter()
params = New SqlParameter() {
New SqlParameter("@UserID", intUserID),
New SqlParameter("@Forename", strForename),
New SqlParameter("@Surname", strSurname),
New SqlParameter("@Hobbies", objHobbyCollection)
}
我可以这样做吗? (哪种方式更有效?)
存储过程会是什么样子?
ALTER PROCEDURE [dbo].[User_Update]
@UserID INT
,@Forename NVARCHAR(50) = NULL
,@Surname NVARCHAR(50) = NULL
,@Hobbies ??????????????