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

Lọc truy vấn SQL theo danh sách các tham số

Giả sử SQL Server 2008 hoặc mới hơn, trong SQL Server, hãy tạo một loại bảng một lần:

CREATE TYPE dbo.ColumnBValues AS TABLE
(
  ColumnB INT
);

Sau đó, một thủ tục được lưu trữ có kiểu như vậy làm đầu vào:

CREATE PROCEDURE dbo.whatever
  @ColumnBValues dbo.ColumnBValues READONLY
AS
BEGIN
  SET NOCOUNT ON;

  SELECT A.* FROM dbo.TableA AS A
    INNER JOIN @ColumnBValues AS c
    ON A.ColumnB = c.ColumnB;
END
GO

Bây giờ trong C #, hãy tạo DataTable và chuyển nó làm tham số cho thủ tục được lưu trữ:

DataTable cbv = new DataTable();
cbv.Columns.Add(new DataColumn("ColumnB"));

// in a loop from a collection, presumably:
cbv.Rows.Add(someThing.someValue);

using (connectionObject)
{
    SqlCommand cmd        = new SqlCommand("dbo.whatever", connectionObject);
    cmd.CommandType       = CommandType.StoredProcedure;
    SqlParameter cbvParam = cmd.Parameters.AddWithValue("@ColumnBValues", cbv);
    cbvParam.SqlDbType    = SqlDbType.Structured;
    //cmd.Execute...;
}

(Bạn có thể muốn làm cho loại này chung chung hơn, tôi đã đặt tên cụ thể để làm rõ nó đang làm gì.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlDependency Độ tin cậy?

  2. Có ảnh hưởng nghiêm trọng đến hiệu suất khi sử dụng Khóa ngoại trong SQL Server không?

  3. Trích xuất các ký tự ở bên phải của một giá trị được phân tách trong một câu lệnh SELECT

  4. SSRS:Làm cách nào để thêm tùy chọn Tất cả vào bộ lọc thả xuống SSRS?

  5. Sao chép các hàng dựa trên giá trị cột trong mỗi hàng