首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重写此查询以使其更具可伸缩性。

重写此查询以使其更具可伸缩性。
EN

Stack Overflow用户
提问于 2010-07-09 13:28:58
回答 3查看 103关注 0票数 0

我有一个网页在我的网站,其中有多个下拉框作为过滤器。

因此,该页面的SQL过程应该如下所示

代码语言:javascript
运行
复制
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语句来检查每个条件.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-09 13:50:28

虽然我非常不喜欢动态SQL,但现在可能是使用动态SQL的时候。您可以一次构建一些查询,然后在最后执行它。

如果您不熟悉,语法如下:

代码语言:javascript
运行
复制
DECLARE @SQL VARCHAR(1000)
SELECT @SQL = 'SELECT * FROM ' + 'SOME_TABLE'
EXEC(@SQL)

确保您处理SQL注入攻击、适当的间隔等。

在这种情况下,我会尽我最大的努力将这个逻辑放入应用程序代码中,但这并不总是可能的。如果您正在使用LINQ或其他LINQ框架,您应该能够安全地完成这一任务,但是要正确构建LINQ查询可能需要一些创造性。

票数 0
EN

Stack Overflow用户

发布于 2010-07-09 13:45:35

您必须有一个包含公式(可能按位)的规则表,并构造一个查询,该查询可以从表中插入变量数据并附加到字符串中以形成sql,并使用动态sql来运行这些查询。

票数 1
EN

Stack Overflow用户

发布于 2010-07-09 13:52:19

您可以设置一组视图,为每个“筛选器”设置一个视图,然后从相应的视图中选择“筛选器”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3213009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档