我有一个表,其中有许多字段。我正在尝试在 asp.net 中创建搜索过滤器,以便用户可以按一个或多个字段的组合进行搜索。所以基本上我想创建一个接受 4 个参数的单个存储过程,如果它不为空,它会将参数附加到 WHERE 子句...
TableExample 有 4 列,Col1 Col2 Col3 Col4
我希望有一种方法可以使用单个存储过程来完成此操作,而不必为每种可能的组合创建一个存储过程。
我正在尝试这样的事情,这是不正确的,但这是我迄今为止所得到的。
THANKS!
CREATE PROCEDURE [dbo].[Search]
@Col1 int,
@Col2 int,
@Col3 int,
@Col4 int
AS
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT *
FROM
[dbo].[TestTable]
WHERE
1=1
CASE
WHEN @Col1 IN NOT NULL
THEN AND [Col1] = @Col1
WHEN @Col2 IN NOT NULL
THEN AND [Col2] = @Col2
WHEN @Col3 IN NOT NULL
THEN AND [Col3] = @Col3
WHEN @Col4 IN NOT NULL
THEN AND [Col4] = @Col4
END
使用 OR 短路这一事实。我假设 -1 不是有效值。
CREATE PROCEDURE [dbo].[Search]
@Col1 int = -1,
@Col2 int = -1,
@Col3 int = -1,
@Col4 int = -1
AS
Begin
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT *
FROM
[dbo].[TestTable]
WHERE
(@Col1 = -1 OR [Col1] = @Col1)
and
(@Col2 = -1 OR [Col2] = @Col2)
and
(@Col3 = -1 OR [Col3] = @Col3)
and
(@Col4 = -1 OR [Col4] = @Col4)
END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)