Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

La stored procedure di SQL Server converte varchar in int

È possibile sfruttare il fatto che SQL Server 2008 ora supporta i tipi di tabella. Puoi definire un tipo di tabella e sul lato .net costruire una DataTable e passalo come parametro alla tua procedura memorizzata. Sul lato SP quel parametro è di tipo [qualunque tipo di tabella tu abbia creato] Ecco un esempio.

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

È quindi possibile aggiungere posizioni come parametro per la procedura memorizzata

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

Nel tuo database devi definire un tipo di tabella come

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

e nella procedura memorizzata aggiungi

@MyPositions Positions Readonly

Ora puoi trattare @MyPositions come tabella nella tua procedura e confrontala con essa.