Передача коллекции объектов в качестве параметра в хранимую процедуру SQL Server
У меня общий вопрос о том, можно ли что-то сделать - и будет ли это наиболее эффективным способом сделать это!
Подводя итог: могу ли я передать коллекцию объектов в качестве параметра хранимой процедуре?
Допустим, у меня есть таблица SQL Server с именемUsers [UserID, Forename, Surname]
и еще один стол называетсяHobbies [HobbyID, UserID, HobbyName, HobbyTypeID]
Эта настройка предназначена для записи нескольких хобби с пользователем.
В моем приложении я хочу обновить запись пользователя.
Обычно - я обновляю пользовательскую таблицу, а затем в коде, перебираю каждое хобби и обновляю запись в таблице хобби за записью.
Если я обновляю имя пользователя и 2 его хобби, для этого потребуется 3 обращения к базе данных.
(1 вызов хранимой процедуры для обновления имени и фамилии и 2 вызова хранимой процедуры для обновления 2 записей хобби)
Мой вопрос:
Могу ли я сделать всего один вызов в базу данных, передав все параметры только одной хранимой процедуре.
например.
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 ??????????????