Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O procedimento armazenado do SQL Server converte varchar em int


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.