在SQL Server中的表中存储SQL查询

时间:2010-05-26 06:06:09

标签: sql-server sql-server-2005

我们的系统中有多个工作。这些作业列在网格中。我们有3种不同的用户类型(usertypeid 1,2,3)。对于每个用户列表不同,他可以通过从下拉列表中选择视图来过滤列表。下表中的ViewName是需要显示的视图。为了实现此功能,开发人员已在下表的SQLExpression中创建了以下表结构和存储的sql片段。据我说,查询不应该存储在数据库中。这种方法的优点和缺点是什么,可用的替代方案是什么?

JobListingViewID         ViewName        SQLExpression            UserTypeID
 3                     All Jobs            1 = 1                       3
 4                     Error Jobs   JobStatusID IN ( 2 )               1
 5                     Error Jobs   JobStatusID IN ( 2 )               2
 6                     Error Jobs   JobStatusID IN ( 2 )               3
 7                     Speech       JobStatusID IN ( 1, 3, 8 )         1

3 个答案:

答案 0 :(得分:1)

您只需要拥有ViewName UserTypeID JobStatusID组合的矩阵表,然后在查询中加入。您不需要动态SQL和额外的数据库查找。

注意:对于“所有作业”视图,您应该只有一个不同的查询放弃JOIN。这将节省一些不必要的处理,并且意味着当您添加新作业时,您不必设置权限。其余使用如下的矩阵。

ViewName        JobStatusID        UserTypeID
Error Jobs             2                1
Error Jobs             2                2
Error Jobs             2                3
Speech                 1                1
Speech                 3                1
Speech                 8                1

答案 1 :(得分:1)

缺点: 1.保持疼痛。 2.没有优化(缓存等)。 3.更改对象名称意味着您必须更改该表中的数据。对于少数记录来说没问题,但是一旦表格增长,你就会花更多的时间来维护这个表格。

答案 2 :(得分:0)

我猜这位开发人员是正确的,如果它适用于他(以及系统的其他部分),那么这种方法就像任何人一样好。如果它会产生问题,请在以后重做 - 性能,维护等等......