sql >> Base de Datos >  >> RDS >> Sqlserver

El procedimiento almacenado de SQL Server convierte varchar a int

Puede aprovechar el hecho de que SQL Server 2008 ahora admite tipos de tablas. Puede definir un tipo de tabla y, en el lado .net, construir una DataTable y páselo como un parámetro a su procedimiento almacenado. En el lado del SP, ese parámetro es del tipo [cualquiera que sea el tipo de tabla que haya creado] Aquí hay un ejemplo.

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)); 

Luego puede agregar posiciones como un parámetro para su procedimiento almacenado

SqlParameter Param = new SqlParameter();
Param.Value = Positions
Param.SqlDbType = SqlDbType.Structured;
Param.ParameterName = @Positions                    
command.Parameters.Add(Param);

En su base de datos, debe definir un tipo de tabla como

CREATE TYPE [dbo].[Positions] AS TABLE(
    [Position] int NULL,
)
GO

y en su procedimiento almacenado agregue

@MyPositions Positions Readonly

Ahora puede tratar @MyPositions como una tabla en su procedimiento y compárelo.