Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gespeicherte SQL Server-Prozedur konvertiert varchar in int

Sie können davon profitieren, dass SQL Server 2008 jetzt Tabellentypen unterstützt. Sie können einen Tabellentyp definieren und auf der .net-Seite eine DataTable erstellen und übergeben Sie das als Parameter an Ihre gespeicherte Prozedur. Auf der SP-Seite ist dieser Parameter vom Typ [welcher Tabellentyp Sie auch immer gemacht haben]. Hier ist ein Beispiel.

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

Sie können dann Positionen als Parameter für Ihre gespeicherte Prozedur anhängen

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

In Ihrer Datenbank müssen Sie einen Tabellentyp als

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

und in Ihrer gespeicherten Prozedur hinzufügen

@MyPositions Positions Readonly

Jetzt können Sie @MyPositions behandeln als Tabelle in Ihre Prozedur einfügen und damit vergleichen.