sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-fråga filtrering efter lista med parametrar

Förutsatt att SQL Server 2008 eller senare, i SQL Server, skapa en tabelltyp en gång:

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

Sedan en lagrad procedur som tar en sådan typ 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

Skapa nu en DataTable i C# och skicka den som en parameter till den lagrade proceduren:

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 kanske vill göra typen mycket mer generisk, jag döpte den specifikt för att göra det tydligt vad den gör.)



  1. Kan inte hitta metoden UseMysql på DbContextOptions

  2. Hur DATEDIFF() fungerar i MariaDB

  3. Lägg till flera rader på bara en rad från en enda tabell

  4. Felaktig neutralisering av specialelement som används i ett SQL-kommando