Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Параметър за дата с множество стойности в съхранена процедура?

Защо не използвате параметър с таблична стойност ?

Създайте дефинирана от потребителя таблица от тип DateTimes на SQL

create type DateTimes as table
(
    [Value] datetime
)

След това променете съхранената си процедура:

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

Сега можете да третирате @SourceFileDates като таблична променлива само за четене.

Когато указвате своя SqlCommand параметри, параметър със стойност на таблица е посочен като SqlDbType.Structured и се предава като DataTable или DataRowcollection . Така че можете да го попълните така:

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

Сега всичко е хубаво и правилно въведено... и не е необходимо да правите анализ или кастинг на низове.

Като странична бележка, можете да продължите и да създадете Strings и Integers видове също; Ще се пристрастите към TVP и ще ги използвате навсякъде.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ВМЪКНЕТЕ много записи с помощта на SQL Server 2008

  2. Как да предотвратите едновременното изпълнение на задания на Sql сървър

  3. съхранявате арабски в SQL база данни

  4. Качете CSV файл на сайта на SharePoint с помощта на SSIS

  5. Как да се покаже дата във формат на дата в САЩ в SQL Server (T-SQL)