SQL Server 2008は簡単です。ユーザー定義のテーブルタイプを作成し、そのIDに親IDのリストを渡すか、最初にそれらの親IDを取得してテーブルに結合するだけのロジックを使用できます子データを保持する
CREATE TYPE [dbo].[Int32List]
AS TABLE (
[ID] int NOT NULL
);
GO
そして、あなたのストアドプロシージャは、このようなものになる::
は、あなたがこのような何かをする、テーブル型を作成するには
CREATE PROCEDURE [dbo].[MyStoredProc]
@ParentIDTable [dbo].[Int32List] READONLY
AS
--logic goes here
GO
をそして、あなたはこのようなあなたのC#コードからそのプロシージャを呼び出します:
DataTable ParentIDs = new DataTable();
ParentIDs.Columns.Add("ID", typeof(int));
SqlConnection connection = new SqlConnection(yourConnectionInfo);
SqlCommand command = new SqlCommand("MyStoredProc", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@ParentIDTable", SqlDbType.Structured).Value = ParentIDs;
command.Parameters["@ParentIDTable"].TypeName = "Int32List";
この方法は、効果的にv SQL Serverに警告し、テーブルのように扱います。私はストアドプロシージャに値の配列を渡したい私のアプリケーション全体でテーブル型を使用します。 C#DataTableの列名は、作成したテーブル型の列名と一致する必要があり、TypeNameプロパティはテーブル型の名前と一致する必要があることを覚えておいてください。
このメソッドでは、DBを1回呼び出すだけで、結果を反復処理するときには、選択リストにParentIDを含めて、各子を適切な親オブジェクトに一致させるようにする必要があります。
は、ここでより詳細にテーブルの種類を説明するための素晴らしいリソースです:http://www.sommarskog.se/arrays-in-sql-2008.html
んGetChildrenByParentId()別の接続を作成し、別のストアドプロシージャを呼び出しますか? – Jason
はい別の接続を作成し、別のストアドプロシージャを呼び出します – azamsharp
どのバージョンのSQL Serverを使用していますか? – Jason