SQL Server 2008 以降を想定して、SQL Server でテーブル タイプを 1 回作成します。
CREATE TYPE dbo.ColumnBValues AS TABLE ( ColumnB INT );
プレ>次に、そのような型を入力として受け取るストアド プロシージャ:
CREATE PROCEDURE dbo.whatever @ColumnBValues dbo.ColumnBValues READONLY AS BEGIN SET NOCOUNT ON; SELECT A.* FROM dbo.TableA AS A INNER JOIN @ColumnBValues AS c ON A.ColumnB = c.ColumnB; END GO
プレ>C# で DataTable を作成し、それをパラメータとしてストアド プロシージャに渡します。
DataTable cbv = new DataTable(); cbv.Columns.Add(new DataColumn("ColumnB")); // in a loop from a collection, presumably: cbv.Rows.Add(someThing.someValue); using (connectionObject) { SqlCommand cmd = new SqlCommand("dbo.whatever", connectionObject); cmd.CommandType = CommandType.StoredProcedure; SqlParameter cbvParam = cmd.Parameters.AddWithValue("@ColumnBValues", cbv); cbvParam.SqlDbType = SqlDbType.Structured; //cmd.Execute...; }
プレ>(型をもっと一般的なものにしたいかもしれません。私はそれが何をしているかを明確にするために特別に名前を付けました。)