sql >> Databáze >  >> RDS >> Sqlserver

Filtrování SQL dotazů podle seznamu parametrů

Za předpokladu, že SQL Server 2008 nebo novější, v SQL Server jednou vytvořte typ tabulky:

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

Potom uložená procedura, která má takový typ jako vstup:

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

Nyní v C# vytvořte DataTable a předejte to jako parametr do uložené procedury:

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

(Možná byste chtěli, aby byl typ mnohem obecnější, pojmenoval jsem ho konkrétně, aby bylo jasné, co dělá.)



  1. Úplné šifrování MariaDB v klidu a během přepravy pro maximální ochranu dat – část první

  2. Zabránit souběžnosti v Nodejs

  3. SQL Server 2012 dotazování na data aplikace Access 2007 pomocí chyby OPENROWSET

  4. REGEXP_REPLACE - odstranit čárky z řetězce POUZE pokud jsou uzavřeny v ()'s