私はここで4つの仮定を立てています:
- SQL-Server 2008 以降を使用している (タグは sql-server のみ)
- あなたの基準は常にフォーマットになります
name = Y and value >=10 and value <= 25
- あなたのvalues列は実際にはint列です(where句に基づく)
- 個別の基準は、OR not and で区切る必要があります (例では
WHERE (Name = 'x' ..) AND (Name = 'y'...)
、true と評価されないものがあるため)
上記が当てはまると仮定すると、テーブル値パラメーターを使用できます。最初のステップは、パラメーターを作成することです。
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 の例