sql >> Databáze >  >> RDS >> Sqlserver

Vícehodnotový parametr data v uložené proceduře?

Proč nepoužít Parametr Table-Valued ?

Vytvořte uživatelsky definovanou tabulku typu DateTimes na SQL

create type DateTimes as table
(
    [Value] datetime
)

Poté změňte uloženou proceduru:

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

Nyní můžete zacházet s @SourceFileDates jako tabulkovou proměnnou pouze pro čtení.

Při zadávání SqlCommand parametry, parametr Table-Valued je určen jako SqlDbType.Structured a předáno jako DataTable nebo DataRowcollection . Takže to můžete naplnit takto:

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

Nyní je vše pěkné a správně napsané... a nemusíte provádět žádnou analýzu nebo přehazování řetězců.

Jako vedlejší poznámku můžete také pokračovat a vytvořit Strings a Integers také typy; Zapojíte se do TVP a budete je používat všude.



  1. Získejte výsledek uložené procedury Laravel

  2. převést regulární výraz PCRE na regulární výraz dotazu mysql

  3. Nemohu načíst ovladač JDBC pro MySQL

  4. Oříznutí více tuku v protokolu transakcí