Przekazywanie kolekcji obiektów jako parametru do procedury przechowywanej SQL Server
Mam ogólne pytanie, czy można coś zrobić - i czy będzie to najbardziej skuteczny sposób!
Podsumowując: czy mogę przekazać kolekcję obiektów jako parametr do procedury składowanej?
Powiedzmy, że mam tabelę SQL Server o nazwieUsers [UserID, Forename, Surname]
i inny stół o nazwieHobbies [HobbyID, UserID, HobbyName, HobbyTypeID]
Ta konfiguracja służy do rejestrowania wielu hobby przeciwko użytkownikowi.
W mojej aplikacji chcę zaktualizować rekord użytkownika.
Normalnie - aktualizowałbym tabelę użytkownika, a następnie kodował, przechodził przez każde hobby i aktualizował rekord tabeli hobby o rekord.
Jeśli aktualizuję nazwę użytkownika i 2 ich hobby, wymagałoby to 3 połączeń do bazy danych.
(1 wywołanie procedury składowanej, aby zaktualizować imię / nazwisko i 2 wywołania procedury składowanej, aby zaktualizować 2 rekordy hobby)
Moje pytanie brzmi:
Czy mogę wykonać tylko 1 wywołanie do bazy danych, przekazując wszystkie parametry tylko do jednej procedury składowanej.
na przykład.
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)
}
Mogę to zrobić ? (i jaki byłby bardziej wydajny?) Jak wyglądałaby procedura składowana?
ALTER PROCEDURE [dbo].[User_Update]
@UserID INT
,@Forename NVARCHAR(50) = NULL
,@Surname NVARCHAR(50) = NULL
,@Hobbies ??????????????