首页
学习
活动
专区
圈层
工具
发布

优化TSQL
EN

Stack Overflow用户
提问于 2018-11-19 16:31:11
回答 1查看 31关注 0票数 0

有一个重复运行的select查询,select子句中的第一列是唯一被其他列替换的列,查询结构的其余部分保持不变。所以这个查询计划被缓存了,我们有什么方法可以参数化第一列吗?

从table1中选择c1,p,a,

从table1中选择c2,p,a

从table1中选择c3,p,a

Select c4,p,a From table1每次查询运行时,只有第一列在变化。有什么方法可以优化这种查询吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-19 19:24:16

我必须承认,这有点难闻。可能还有更好的方法,但我们不知道你的用例。

您可以尝试这样做:

代码语言:javascript
复制
DECLARE @mockup TABLE(c1 INT, c2 INT, c3 INT, p VARCHAR(100),a VARCHAR(100));
INSERT INTO @mockup VALUES(1,2,3,'Row 1','blah 1')
                         ,(11,22,33,'Row 2','blah 2')
                         ,(111,222,333,'Row 3','blah 3');

DECLARE @FirstColumn VARCHAR(10)='c3';

SELECT CASE @FirstColumn WHEN 'c1' THEN c1
                         WHEN 'c2' THEN c2
                         WHEN 'c3' THEN c3
                         ELSE NULL END AS DynamicFirstColumn
      ,p
      ,a
FROM @mockup;

其思想是使用CASE来确定在参数之后首先看到的是哪一列。如果您也想看到不同的列名(我使用了DynamicFirstColumn),您可以

  • 为每个案例创建视图或
  • 使用动态创建的SQL.

作为一种解决办法,您可以包括提交的参数,并将其与结果集一起返回。在这种情况下,消费者将知道使用了哪一列...

代码语言:javascript
复制
SELECT CASE @FirstColumn WHEN 'c1' THEN c1
                         WHEN 'c2' THEN c2
                         WHEN 'c3' THEN c3
                         ELSE NULL END AS DynamicFirstColumn
      ,p
      ,a
      ,@FirstColumn --<-- Here we include the source we use above
FROM @mockup
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53370876

复制
相关文章

相似问题

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