Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Parameter tanggal multi-nilai dalam prosedur tersimpan?

Mengapa tidak menggunakan Parameter Nilai Tabel ?

Buat DateTimes tipe tabel yang ditentukan pengguna pada SQL

create type DateTimes as table
(
    [Value] datetime
)

Kemudian ubah prosedur tersimpan Anda:

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

Sekarang Anda dapat memperlakukan @SourceFileDates sebagai variabel tabel hanya-baca.

Saat menentukan SqlCommand parameter, parameter Tabel-Valued ditetapkan sebagai SqlDbType.Structured dan diteruskan sebagai DataTable atau DataRowcollection . Jadi, Anda dapat mengisinya seperti ini:

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

Sekarang semuanya bagus dan diketik dengan benar... dan Anda tidak perlu melakukan penguraian string atau casting.

Sebagai catatan tambahan, Anda sebaiknya melanjutkan dan membuat Strings dan Integers jenis juga; Anda akan terpikat pada TVP dan menggunakannya di semua tempat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 Cara untuk Melihat apakah Fitur Usang Masih Digunakan di Instance SQL Server

  2. String Koneksi SQL Server - dot (.) Atau (lokal) atau (localdb)

  3. Cara Mengembalikan Substring dari String di SQL Server menggunakan Fungsi SUBSTRING()

  4. SQL Server 2008 - Pencarian/Penyortiran Lanjutan

  5. Buat tampilan di beberapa database