(たとえば)@IDList
を渡して次のように記述できるストアドプロシージャを作成するにはどうすればよいですか。
Select * from Foo Where ID in @IDList
これは可能ですか?
この答えを見てください...
SQL2005以降では、コードから配列を直接送信できます。
最初にカスタムタイプを作成します
CREATE TYPE Array AS table (Item varchar(MAX))
ストアドプロシージャよりも。
CREATE PROCEDURE sp_TakeArray
@array AS Array READONLY
AS BEGIN
Select * from Foo Where ID in (SELECT Item FROM @array)
END
次に、DataTableを配列として渡すコードから呼び出します
DataTable items = new DataTable();
items.Columns.Add( "Item", typeof( string ) );
DataRow row = items.NewRow();
row.SetField<string>( "Item", <item to add> );
items.Rows.Add( row );
SqlCommand command = new SqlCommand( "sp_TakeArray", connection );
command.CommandType = CommandType.StoredProcedure;
SqlParameter param = command.Parameters.Add( "@Array", SqlDbType.Structured );
param.Value = items;
param.TypeName = "dbo.Array";
SqlDataReader reader = command.ExecuteReader();
個々のIDをテーブルBに書き込み、すべて同じ「キー」を使用します(a GUIDおそらく)。
次に、テーブルAに対するクエリには、
where ID in (select ID from B where key = @TempKey)
(キーを使い終わったら、キーを削除することもできます。または、キーにタイムスタンプを付けて、後でsqlジョブで削除することもできます。)
長所:
短所: