代码之家  ›  专栏  ›  技术社区  ›  SE1986

存储过程可以重用临时表,但原始查询不能[重复]

  •  0
  • SE1986  · 技术社区  · 6 年前

    CREATE PROCEDURE spTest
    AS
    BEGIN
        SELECT * INTO #Test FROM [orders] 
        SELECT * FROM #Test
        -- notice no cleanup of temp table 
    END
    

    在SSMS中,我可以这样做:

    spTest
    GO
    spTest
    GO
    

    但是,如果我这样做:

    SELECT * INTO #Test FROM [orders]
    SELECT * FROM #Test
    GO
    
    SELECT * INTO #Test FROM [orders]
    SELECT * FROM #Test
    GO
    

    我得到一个错误,临时表已经存在。

    为什么在存储过程中不必清理临时表,但在原始查询中,我需要清理?

    上述查询在同一个SSMS窗口中运行,并在同一个连接中运行

    当我练习完临时表格后,我会意识到这很好

    1 回复  |  直到 6 年前
        1
  •  1
  •   Md. Suman Kabir    6 年前

    这是因为您可以在一个范围内创建一个临时表。当您调用SP两次时,该SP将在不同的作用域中运行,因此不会出现错误。但是,当您在同一个作用域中执行同一操作两次时,您将得到该错误。