sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-forespørgselsfiltrering efter liste over parametre

Forudsat at SQL Server 2008 eller nyere, i SQL Server, skal du oprette en tabeltype én gang:

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

Derefter en lagret procedure, der tager sådan en type som 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

Nu i C#, opret en datatabel og send den som en parameter til den lagrede 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...;
}

(Du vil måske gøre typen meget mere generisk, jeg navngav den specifikt for at gøre det klart, hvad den gør.)



  1. MYSQL forkert DATETIME-format

  2. Find ødelagte objekter i SQL Server

  3. Sådan vælger du mindste værdi fra flere kolonner med PHP

  4. Postgis SQL til nærmeste naboer