Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tham số ngày nhiều giá trị trong thủ tục được lưu trữ?

Tại sao không sử dụng tham số Bảng giá trị ?

Tạo loại bảng do người dùng xác định DateTimes trên SQL

create type DateTimes as table
(
    [Value] datetime
)

Sau đó, sửa đổi thủ tục đã lưu trữ của bạn:

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

Bây giờ bạn có thể coi @SourceFileDates dưới dạng một biến bảng chỉ đọc.

Khi chỉ định SqlCommand của bạn tham số, tham số Table-Valued được chỉ định là SqlDbType.Structured và được chuyển dưới dạng DataTable hoặc DataRowcollection . Vì vậy, bạn có thể điền nó như sau:

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

Giờ đây, mọi thứ đều tốt đẹp và được nhập đúng cách ... và bạn không phải thực hiện bất kỳ phân tích cú pháp hoặc truyền chuỗi nào.

Lưu ý thêm, bạn cũng có thể tiếp tục và tạo StringsIntegers các loại cũng vậy; Bạn sẽ được thu hút trên các TVP và sử dụng chúng ở mọi nơi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thay thế ký tự thứ n trong máy chủ sql

  2. Tham số độ dài không hợp lệ được chuyển đến hàm LEFT hoặc SUBSTRING

  3. Trả về thông tin phiên bản hệ điều hành trong SQL Server bằng Chế độ xem quản lý động sys.dm_os_host_info

  4. SQL Server 2017:Các tính năng có sẵn trên Linux

  5. Thủ tục được lưu trữ - trả về danh tính dưới dạng tham số đầu ra hoặc đại lượng vô hướng