sql >> Database >  >> RDS >> Sqlserver

Filteren van SQL-query's op lijst met parameters

Ervan uitgaande dat SQL Server 2008 of nieuwer, in SQL Server, een keer een tabeltype maakt:

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

Dan een opgeslagen procedure die zo'n type als invoer neemt:

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

Maak nu in C# een DataTable en geef die als parameter door aan de opgeslagen procedure:

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

(Misschien wil je het type veel generieker maken, ik heb het specifiek genoemd om duidelijk te maken wat het doet.)



  1. Alternatief voor het gebruik van WHERE ... IN (...) voor langzame SQL-query's

  2. Meerdere items in een kolom op mysql . houden

  3. Verzamelmethode:DELETE-procedure in Oracle Database

  4. Voorbeelden van het converteren van 'smalldatetime' naar 'datetime' in SQL Server (T-SQL)