T-SQL Dynamic SQL and Temp Tables

前端 未结 5 1870
梦毁少年i
梦毁少年i 2020-11-28 11:04

It looks like #temptables created using dynamic SQL via the EXECUTE string method have a different scope and can\'t be referenced by \"fixed\" SQLs in the same stored proced

5条回答
  •  悲哀的现实
    2020-11-28 11:58

    Result sets from dynamic SQL are returned to the client. I have done this quite a lot.

    You're right about issues with sharing data through temp tables and variables and things like that between the SQL and the dynamic SQL it generates.

    I think in trying to get your temp table working, you have probably got some things confused, because you can definitely get data from a SP which executes dynamic SQL:

    USE SandBox
    GO
    
    CREATE PROCEDURE usp_DynTest(@table_type AS VARCHAR(255))
    AS 
    BEGIN
        DECLARE @sql AS VARCHAR(MAX) = 'SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''' + @table_type + ''''
        EXEC (@sql)
    END
    GO
    
    EXEC usp_DynTest 'BASE TABLE'
    GO
    
    EXEC usp_DynTest 'VIEW'
    GO
    
    DROP PROCEDURE usp_DynTest
    GO
    

    Also:

    USE SandBox
    GO
    
    CREATE PROCEDURE usp_DynTest(@table_type AS VARCHAR(255))
    AS 
    BEGIN
        DECLARE @sql AS VARCHAR(MAX) = 'SELECT * INTO #temp FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''' + @table_type + '''; SELECT * FROM #temp;'
        EXEC (@sql)
    END
    GO
    
    EXEC usp_DynTest 'BASE TABLE'
    GO
    
    EXEC usp_DynTest 'VIEW'
    GO
    
    DROP PROCEDURE usp_DynTest
    GO
    

提交回复
热议问题