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

Datoparameter med flere værdier i lagret procedure?

Hvorfor ikke bruge en Table-Valued parameter ?

Opret en brugerdefineret tabeltype DateTimes på SQL

create type DateTimes as table
(
    [Value] datetime
)

Rediger derefter din lagrede procedure:

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

Nu kan du behandle @SourceFileDates som en skrivebeskyttet tabelvariabel.

Når du angiver din SqlCommand parametre, er en parameter med tabelværdi angivet som SqlDbType.Structured og bestået som en DataTable eller DataRowcollection . Så du kan udfylde det sådan:

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 er alt pænt og korrekt skrevet... og du behøver ikke at lave nogen strengparsing eller casting.

Som en sidebemærkning kan du lige så godt gå videre og oprette Strings og Integers også typer; Du bliver hooked på TVP'er og bruger dem overalt.



  1. Fjerntilslut til MySQL på Google Compute Engine VM

  2. Rails 5.2 ActiveStorage med UUID'er på Postgresql

  3. PostgreSQL tilbagekalder tilladelser fra pg_catalog-tabeller

  4. MySQL Database backup automatisk på en Windows-server