Sql server 将临时表代码转换为CTE以提高性能

Sql server 将临时表代码转换为CTE以提高性能,sql-server,Sql Server,我的存储过程中有以下代码: CREATE MyProc AS CREATE TABLE #Table1 ( Field1 INT NOT NULL, Field2 VARCHAR NULL, Field3 VARCHAR NULL, Field4 VARCHAR NULL ); ---填充临时表--- INSERT INTO #Table1 (Field1) SELECT val1 FROM Tab1 INSERT INTO #Table1

我的存储过程中有以下代码:

CREATE MyProc
AS


CREATE TABLE #Table1 
(    
 Field1 INT NOT NULL,
 Field2 VARCHAR NULL,
 Field3 VARCHAR NULL,
 Field4 VARCHAR NULL

 );
---填充临时表---

INSERT INTO #Table1  (Field1)          
SELECT val1 FROM Tab1

INSERT INTO #Table1  (Field1,Field2)          
SELECT val1,"val2"  FROM Tab2

INSERT INTO #Table1  (Field1,Field2,Field3)          
SELECT val1,"val2","val3"  FROM Tab3

INSERT INTO #Table1  (Field1,Field2,Field3,Field4)          
SELECT val1,"val2","val3","val4"  FROM Tab3

SELECT Field1,Field2,Field3,Field4 FROM #Table1 
DROP #Table1

大约有10-15条INSERT语句填充临时表。我想使用CTE或其他方法优化存储过程以提高性能。如何重写该过程?

我不完全确定这在任何方面是否会更好,但这是使用CTE来获得与我使用一些懒驴值数组相同的输出让它开箱即用,你当然可以用实际的表格代替它们:

with cte (f1, f2, f3, f4)
as (
    select 1, null, null, null
    from (
        values (1)
        ) t1(n1)

    union all

    select 1, 2, null, null
    from (
        values (1, 2)
        ) t1(n1, n2)

    union all

    select 1, 2, 3, null
    from (
        values (1, 2, 3)
        ) t1(n1, n2, n3)

    union all

    select 1, 2, 3, 4
    from (
        values (1, 2, 3, 4)
        ) t1(n1, n2, n3, n4)
    )
select *
from cte

为什么你认为CTE会提高性能?我也这么想,但我有一个顾虑。太多的联盟都会影响性能吗?如果不知道您的设置和使用的很多详细信息,我和其他任何人都无法回答这一问题。我的建议是,测试一下。布丁的证据在于吃;测试时,请务必小心,不要弄坏工作正常的东西!