首页 > 解决方案 > 根据输入获取更多 SELECT 数据

问题描述

似乎是一个简单的答案,但与我发现的情况相去甚远,使用存储过程可能不可行。

只是想问一下,因为可能有一个优雅的解决方案......(顺便说一句:我在 SQL Server 2014 上运行我的数据库)

我有一个非常简单的选择

select companyID, companyName 
from tblCompanies

但是在某些情况下,我需要获取更大的数据集

select companyID, companyName, companyAddress, companyCountry 
from tblCompanies

当然这可以通过创建多个存储过程来完成

也可以使用 IF-ELSE 传递一个参数并在完全不同的 SELECTS 中进行选择。

不过,这两种方式似乎都很麻烦,有很多重复和可维护性问题。

也许可能有一种方法可以根据该输入值获取特定列,例如:

select 
    companyID, companyName, 
    case when @FULL = 1 then companyAddress end 
from tblCompanies

标签: sqlsql-serverstored-proceduresoptimization

解决方案


看起来你想多想了。你会节省多少时间。这个样本公司大概是毫秒?但是请考虑更大的下游,以了解您系统的其余部分。由于数据缓存,在不同时间做一些定时查询并记录统计信息。因此,有一天对您将调用的实际查询进行缩写,另一天(或同一天晚些时候)对所有列进行。你真的省了多少钱。

此外,获取更复杂/详细/JOIN 查询并执行类似操作。你节省了多少时间。

现在,想想界面。仅仅因为您有 10 个可用字段并且只想显示 2 个,这足以让用户界面仅显示这些字段。但是,如果用户更改为详细视图,则您已经拥有显示所有 10 个字段的数据,而无需返回数据库再次查询,这并没有破坏较小集仅节省一两秒的目的。

从维护的角度来看,我认为你正在寻找的东西是不值得的。

现在,如果有一些表包含机密数据,那么是的,我将从一个非机密的完整数据查询开始,而不是一个包含机密数据的完整数据,但无论如何这些都将取决于具体情况。


推荐阅读