我有一个网页在我的网站,其中有多个下拉框作为过滤器。
因此,该页面的SQL过程应该如下所示
IF @Filter1 = 0, @Filter2 = 0, @Filter3 = 0
BEGIN
SELECT * FROM Table1
END
ELSE IF @Filter1 = 1, @Filter2 = 0, @Filter3 = 0
BEGIN
SELECT * FROM Table2
END在开始的时候,每个过滤器只有很少的结果,所以没有太多的排列。但是,添加了更多的过滤器,如果现在进行其他检查的话,会有20多个过滤器。
因此,如果每个过滤器有5个选项,如果其他检查以返回依赖于过滤器的数据,则需要执行5*5*5 = 125。
更新第一个过滤器更改WHERE条件,第二个过滤器向结果集添加更多表,第三个过滤器按条件更改顺序
如何使这个查询更具有可伸缩性,这样除了使用动态SQL之外,每次向列表中添加新的筛选器时,我都不必编写新的IF the语句来检查每个条件.
发布于 2010-07-09 13:50:28
虽然我非常不喜欢动态SQL,但现在可能是使用动态SQL的时候。您可以一次构建一些查询,然后在最后执行它。
如果您不熟悉,语法如下:
DECLARE @SQL VARCHAR(1000)
SELECT @SQL = 'SELECT * FROM ' + 'SOME_TABLE'
EXEC(@SQL)确保您处理SQL注入攻击、适当的间隔等。
在这种情况下,我会尽我最大的努力将这个逻辑放入应用程序代码中,但这并不总是可能的。如果您正在使用LINQ或其他LINQ框架,您应该能够安全地完成这一任务,但是要正确构建LINQ查询可能需要一些创造性。
发布于 2010-07-09 13:45:35
您必须有一个包含公式(可能按位)的规则表,并构造一个查询,该查询可以从表中插入变量数据并附加到字符串中以形成sql,并使用动态sql来运行这些查询。
发布于 2010-07-09 13:52:19
您可以设置一组视图,为每个“筛选器”设置一个视图,然后从相应的视图中选择“筛选器”。
https://stackoverflow.com/questions/3213009
复制相似问题