Passando uma coleção de objetos como um parâmetro para o procedimento armazenado do SQL Server
Eu tenho uma pergunta geral sobre se algo pode ser feito - e se será a maneira mais eficiente de fazer isso!
Para resumir: posso passar uma coleção de objetos como um parâmetro para um procedimento armazenado?
Digamos que eu tenha uma tabela do SQL Server chamadaUsers [UserID, Forename, Surname]
e outra mesa chamadaHobbies [HobbyID, UserID, HobbyName, HobbyTypeID]
Esta configuração é gravar vários passatempos contra um usuário.
No meu aplicativo, quero atualizar o registro do usuário.
Normalmente - eu atualizaria a tabela do usuário e depois no código, passaria por cada hobby e atualizaria o registro da tabela de hobbies por registro.
Se eu estou atualizando o nome do usuário e 2 de seus hobbies, isso exigiria 3 chamadas para o banco de dados.
(1 chamada para um procedimento armazenado para atualizar o nome próprio / sobrenome e 2 chamadas para um procedimento armazenado para atualizar os 2 registros de hobby)
Minha pergunta é:
Posso fazer apenas 1 chamada para o banco de dados, passando todos os parâmetros para apenas 1 procedimento armazenado.
por exemplo.
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)
}
Posso fazer isso ? (e qual caminho seria mais eficiente?) Como seria o procedimento armazenado?
ALTER PROCEDURE [dbo].[User_Update]
@UserID INT
,@Forename NVARCHAR(50) = NULL
,@Surname NVARCHAR(50) = NULL
,@Hobbies ??????????????