Você pode aproveitar o fato de que o SQL Server 2008 agora oferece suporte a tipos de tabela. Você pode definir um tipo de tabela e no lado .net construir um
DataTable
e passe isso como um parâmetro para seu procedimento armazenado. No lado do SP, esse parâmetro é do tipo [qualquer tipo de tabela que você criou] Aqui está um exemplo. 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));
Você pode então anexar posições como um parâmetro para seu procedimento armazenado
SqlParameter Param = new SqlParameter();
Param.Value = Positions
Param.SqlDbType = SqlDbType.Structured;
Param.ParameterName = @Positions
command.Parameters.Add(Param);
Em seu banco de dados você tem que definir um tipo de tabela como
CREATE TYPE [dbo].[Positions] AS TABLE(
[Position] int NULL,
)
GO
e em seu procedimento armazenado adicione
@MyPositions Positions Readonly
Agora você pode tratar
@MyPositions
como uma tabela em seu procedimento e compare com ela.