首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保存sql查询中的记录筛选条件

保存sql查询中的记录筛选条件
EN

Stack Overflow用户
提问于 2011-08-04 09:37:33
回答 2查看 2.1K关注 0票数 2

我希望能够在数据库中存储记录过滤条件(基本上是SELECT查询中WHERE之后的内容),并希望稍后在SELECT中使用此条件。该场景是由用户(很少)设置过滤条件,并且在每次检索数据记录时(通常)使用该条件。

过滤条件是一个布尔表达式,例如:(x和y) OR z。x、y和z是可以通过连接表连接到数据记录的关键字。

我可以将表达式存储为text/xml,然后在每次需要检索数据时对其进行解析并动态构造sql查询,但这似乎效率很低。

有没有更好的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-05 00:17:57

如果您的列选择是静态的,另一种方法是在查询之外创建一个StoredProcedure,并将StoredProcedure名称存储到某个'QueryMaster‘表中。这样,您就可以将动态查询限制为只使用Exec SP_EXECUTESQL <SP_NAME> <Params>,并为您的主要选择获得编译查询的好处。

你可以使用Avoid Conversions In Execution Plans By Using sp_executesql Instead of Exec

如果您的列选择也不是静态的,您可能希望创建视图,而不是存储的过程。只有当您的主表很大或使用大量连接时,这可能会更好。

这是假设您有大量可能的过滤条件和少量的实际过滤条件。例如,用户可以过滤100列-但他们可能会创建25-30个这样的组合,并继续使用它。

如果要过滤的列数量有限,更好的方法是使用CaseIsNullCollace等创建一个通用的where子句。请参阅Implementing Dynamic WHERE-Clause in Static SQL中的一些示例。

票数 2
EN

Stack Overflow用户

发布于 2011-08-04 09:55:56

我有一种感觉,这个问题没有更好的解决方案。您必须将筛选条件( where子句)存储在数据库或文件中的某个位置。无论何时想要执行查询,都必须从文件/db中获取过滤条件的详细信息,并使用一些代码构建查询。

我不认为有任何方法可以绕过这一点-数据库系统没有一个特性可以帮助解决这个问题。

如果这会导致效率问题,您可以在第一次读取过滤器详细信息后将其缓存到某个地方。

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

https://stackoverflow.com/questions/6935217

复制
相关文章

相似问题

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