我在这里做了4个假设:
- 您有 SQL-Server 2008 或更高版本(标记仅为 sql-server)
- 您的标准将始终采用格式
name = Y and value >=10 and value <= 25
- 您的 values 列实际上是一个 int 列(基于您的 where 子句)
- 您的单独标准应该由 OR 分隔并且(因为在您的示例中,您拥有
WHERE (Name = 'x' ..) AND (Name = 'y'...)
的永远不会评估为真)
假设上述情况属实,那么您可以使用表值参数。第一步是创建您的参数:
CREATE TYPE dbo.TableFilter AS TABLE
( Name VARCHAR(50),
LowerValue INT,
UpperValue INT
);
然后您可以创建一个程序来获取您的过滤结果
CREATE PROCEDURE dbo.CustomTableFilter @Filter dbo.TableFilter READONLY
AS
SELECT T.*
FROM T
WHERE EXISTS
( SELECT 1
FROM @Filter f
WHERE T.Name = f.Name
AND T.Value >= f.LowerValue
AND T.Value <= f.UpperValue
)
然后,您可以使用以下方式调用您的程序:
DECLARE @Filter dbo.TableFilter;
INSERT @Filter VALUES ('X', 1, 5), ('Y', 10, 25);
EXECUTE dbo.CustomTableFilter @Filter;
SQL Fiddle 示例