sql >> Database >  >> RDS >> Sqlserver

Datumparameter met meerdere waarden in opgeslagen procedure?

Waarom gebruikt u geen Table-Valued parameter ?

Maak een door de gebruiker gedefinieerd tabeltype DateTimes op SQL

create type DateTimes as table
(
    [Value] datetime
)

Pas dan uw opgeslagen procedure aan:

ALTER PROCEDURE spSelectPlacementData
(
    @ClientID           SMALLINT,
    @SourceFileDates    DateTimes readonly -- must be readonly
)

Nu kunt u @SourceFileDates . behandelen als een alleen-lezen tabelvariabele.

Bij het specificeren van uw SqlCommand parameters wordt een tabelwaardeparameter opgegeven als SqlDbType.Structured en doorgegeven als een DataTable of DataRowcollection . U kunt het dus als volgt invullen:

var sourceFileDates = new DataTable();
sourceFileDates.Columns.Add("Value", typeof(DateTime));
foreach (DateTime file in job.sourceFiles)
{
    sourceFileDates.Rows.Add(file);
}
selectRunCommand.Parameters.Add(new SqlParameter {
    ParameterName = "@SourceFileDates", 
    Value = sourceFileDates,
    SqlDbType = SqlDbType.Structured // make sure you specify structured
});

Nu is alles mooi en correct getypt... en je hoeft geen strings te ontleden of te casten.

Even terzijde:je kunt net zo goed doorgaan en Strings . maken en Integers soorten ook; Je raakt verslaafd aan TVP's en gebruikt ze overal.



  1. (Eén tabel) rijen invoegen

  2. Een cel markeren PHP een bepaalde kleur op basis van MYSQL-waarde

  3. PostgreSQL waar alles in array staat

  4. Hoe kan ik voorkomen dat een automatisch oplopende ID wordt bijgewerkt bij het bijwerken van een dubbele sleutel?