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   ??????????????

questionAnswers(1)

yourAnswerToTheQuestion