我有一个关于是否可以做某事的一般性问题 - 以及这是否是最有效的方法!
总结一下:我可以将对象集合作为参数传递给存储过程吗?
假设我有一个名为的 SQL Server 表Users [UserID, Forename, Surname]
和另一个名为Hobbies [HobbyID, UserID, HobbyName, HobbyTypeID]
这个设置是为了记录一个用户的多个爱好。
在我的应用程序中,我想更新用户记录。
通常 - 我会更新用户表,然后在代码中循环遍历每个爱好并逐条更新爱好表记录。
如果我要更新用户的名字和他们的 2 个爱好,这将需要 3 次调用数据库。
(1 次调用存储过程来更新名字/姓氏,2 次调用存储过程来更新 2 条爱好记录)
我的问题是:
我可以通过将所有参数仅传递给 1 个存储过程来对数据库进行 1 次调用吗?
例如。
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 ??????????????