Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La procédure stockée SQL Server convertit varchar en int

Vous pouvez tirer parti du fait que SQL Server 2008 prend désormais en charge les types de table. Vous pouvez définir un type de table et côté .net construire un DataTable et transmettez-le en tant que paramètre à votre procédure stockée. Du côté SP, ce paramètre est de type [quel que soit le type de table que vous avez créé] Voici un exemple.

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

Vous pouvez ensuite ajouter des positions en tant que paramètre de votre procédure stockée

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

Dans votre base de données, vous devez définir un type de table comme

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

et dans votre procédure stockée ajoutez

@MyPositions Positions Readonly

Vous pouvez maintenant traiter @MyPositions sous forme de tableau dans votre procédure et comparez-le.