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

Филтриране на SQL заявки по списък с параметри

Ако приемем SQL Server 2008 или по-нов, в SQL Server създайте тип таблица веднъж:

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

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

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

Сега в C# създайте DataTable и го предайте като параметър към съхранената процедура:

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

(Може да искате да направите типа много по-общ, наименувах го специално, за да стане ясно какво прави.)



  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 - SQL Server / TSQL урок, част 62

  2. Инсталиране на Microsoft SQL Server 2012 Enterprise Edition с сервизен пакет 1

  3. Забавление с BULK INSERT SQL SERVER - тип несъответствие или невалиден знак за посочената кодова страница

  4. 3 начина да получите списък с бази данни в SQL Server (T-SQL)

  5. Съхранена процедура - връщане на идентичност като изходен параметър или скалар