sql >> Databasteknik >  >> RDS >> Sqlserver

Flervärdesdatumparameter i lagrad procedur?

Varför inte använda en Table-Valued parameter ?

Skapa en användardefinierad tabelltyp DateTimes på SQL

create type DateTimes as table
(
    [Value] datetime
)

Ändra sedan din lagrade procedur:

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

Nu kan du behandla @SourceFileDates som en skrivskyddad tabellvariabel.

När du anger ditt SqlCommand parametrar, anges en tabellvärderad parameter som SqlDbType.Structured och skickades som en DataTable eller DataRowcollection . Så du kan fylla i det så här:

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 är allt snyggt och korrekt skrivet... och du behöver inte göra någon stränganalys eller casting.

Som en sidoanteckning kan du lika gärna gå vidare och skapa Strings och Integers typer också; Du kommer att fastna för TVP:er och använda dem överallt.



  1. PostgreSQL:förbättrar pg_dump, pg_restore prestanda

  2. CSV-kopia till Postgres med array av anpassad typ med JDBC

  3. problem med python manage.py migrate -> Ingen modul med namnet psycopg2

  4. Hur kan jag testa om en kolumn finns i en tabell med hjälp av en SQL-sats