sql >> データベース >  >> RDS >> Sqlserver

パラメータのリストによる SQL クエリのフィルタリング

    SQL Server 2008 以降を想定して、SQL Server でテーブル タイプを 1 回作成します。

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

    次に、そのような型を入力として受け取るストアド プロシージャ:

    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
      

    C# で DataTable を作成し、それをパラメータとしてストアド プロシージャに渡します。

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

    (型をもっと一般的なものにしたいかもしれません。私はそれが何をしているかを明確にするために特別に名前を付けました。)



    1. PL / pgSQLを使用してJSONにキーが存在するかどうかを確認しますか?

    2. Accessでデータベース図を作成する方法

    3. Java Class.forName、JDBC接続ローディングドライバー

    4. 全体的なスコアを計算するためのピボットを使用したSUM