【发布时间】:2010-11-13 00:41:11
【问题描述】:
我有一张表,里面有很多字段。我正在尝试在 asp.net 中创建搜索过滤器,以便用户可以按一个或多个字段组合进行搜索。所以基本上我想创建一个包含 4 个参数的存储过程,如果它不为空,它会将参数附加到 WHERE 子句...
TableExample 有 4 列,Col1 Col2 Col3 Col4
我希望有一种方法可以使用单个存储过程来做到这一点,而不必为每个可能的组合创建一个。
我正在尝试这样的事情,这是不正确的,但这是我到目前为止所得到的。
谢谢!
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
【问题讨论】:
-
那么共识是什么,在 C# 的代码端构建一个查询字符串然后进行查询,而不是尝试动态构建存储的 proc 会更好吗?存储过程方法似乎有一些陷阱......
标签: c# asp.net sql stored-procedures store