我有一个页面,用户在其中动态添加搜索条件以过滤掉记录。我将这些条件发送到 TVP 中的存储过程。现在我需要编写一个查询,将这些过滤器用作“AND”而不是“OR”
考虑一个学生表的例子
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之间进行交叉连接,但查询是ORing而不是TVP中的条件
示例查询:
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)