有一个重复运行的select查询,select子句中的第一列是唯一被其他列替换的列,查询结构的其余部分保持不变。所以这个查询计划被缓存了,我们有什么方法可以参数化第一列吗?
从table1中选择c1,p,a,
从table1中选择c2,p,a
从table1中选择c3,p,a
Select c4,p,a From table1每次查询运行时,只有第一列在变化。有什么方法可以优化这种查询吗?
发布于 2018-11-19 19:24:16
我必须承认,这有点难闻。可能还有更好的方法,但我们不知道你的用例。
您可以尝试这样做:
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),您可以
作为一种解决办法,您可以包括提交的参数,并将其与结果集一起返回。在这种情况下,消费者将知道使用了哪一列...
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 @mockuphttps://stackoverflow.com/questions/53370876
复制相似问题