Вы можете воспользоваться тем, что SQL Server 2008 теперь поддерживает типы таблиц. Вы можете определить тип таблицы и на стороне .net создать DataTable
и передать его в качестве параметра вашей хранимой процедуре. На стороне SP этот параметр имеет тип [независимо от того, какой тип таблицы вы создали]. Вот пример.
TotalPositions = [Some List] //of CSV List
DataTable Positions = new DataTable(); //Create the Datatype
Positions.Columns.Add("PositionID", typeof(int)); //
foreach (string sPos in TotalPositions.Split(','))
Positions.Rows.Add(int.Parse(sPos));
Затем вы можете добавить позиции в качестве параметра для вашей хранимой процедуры
SqlParameter Param = new SqlParameter();
Param.Value = Positions
Param.SqlDbType = SqlDbType.Structured;
Param.ParameterName = @Positions
command.Parameters.Add(Param);
В вашей базе данных вы должны определить тип таблицы как
CREATE TYPE [dbo].[Positions] AS TABLE(
[Position] int NULL,
)
GO
и в вашей хранимой процедуре добавьте
@MyPositions Positions Readonly
Теперь вы можете рассматривать @MyPositions
как таблицу в вашей процедуре и сравнивать с ней.