私は何かができるかどうか、そしてそれがそれを行う最も効率的な方法になるかどうかについて一般的な質問があります!
要約すると、オブジェクトコレクションをパラメータとしてストアドプロシージャに渡すことはできますか?
Users [UserID, Forename, Surname]
と呼ばれるSQLServerテーブルとと呼ばれる別のテーブルがあるとしましょう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 ??????????????