ユーザーが検索条件を動的に追加してレコードを除外するページがあります。これらの条件を TVP のストアド プロシージャに送信しています。ここで、「OR」ではなく「AND」として機能するこれらのフィルターを適用するクエリを作成する必要があります。
学生テーブルの例を考えてみましょう
ID Name Marks
----------- --------- -------
2 bab 65
4 bad 75
6 baf 85
TVP で Stored proc の条件を取得しています (列と演算子の ID を送信していますが、わかりやすくするために、この例では列名と演算子を使用しました)
Column Operator Value
----------- --------- -------
Name Contains a
Marks >= 75
ここで、この TVP を使用して学生テーブルからレコードを除外する必要があります。この例では、学生テーブルの最後の 2 行がユーザーに表示されます。
これに対するクエリの作成を手伝ってくれる人はいますか?学生テーブルと TVP の間でクロス結合を試みましたが、クエリは TVP の条件の AND ではなく OR です。
サンプルクエリ:
DECLARE @tmpCond TABLE
(
ColumnId SMALLINT,
OperatorId SMALLINT,
Value VARCHAR(10)
)
INSERT INTO @tmpCond
( ColumnId ,
OperatorId ,
Value
)
VALUES ( 1,1,'a')
,(2,2,'75')
SELECT * FROM dbo.Student A
CROSS JOIN @tmpCond B
WHERE
(B.ColumnId = 1 AND B.OperatorId = 1 AND A.NAME LIKE '%'+B.Value+'%')
OR
(B.ColumnId = 2 AND B.OperatorId = 2 AND A.Marks >= B.Value)