Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Filtrowanie zapytań SQL według listy parametrów

Zakładając, że SQL Server 2008 lub nowszy, w SQL Server, utwórz typ tabeli raz:

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

Następnie procedura składowana, która przyjmuje taki typ jako dane wejściowe:

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

Teraz w C# utwórz tabelę DataTable i przekaż ją jako parametr do procedury składowanej:

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żesz chcieć uczynić ten typ bardziej ogólnym, nazwałem go specjalnie, aby było jasne, co robi.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wywołanie niezdefiniowanej funkcji sqlsrv_connect() — rozwiązywanie problemów

  2. Uprawnienia SQL Server w przechowywanych procesach z dynamicznym SQL

  3. Jak tworzyć widoki zmaterializowane w SQL Server?

  4. Jak upuścić listę tabel SQL Server, ignorując ograniczenia?

  5. Jaki jest cel replikacji danych?