动态SQL结果INTO #Temp表

时间:2015-03-10 08:28:52

标签: sql sql-server sql-server-2008 select dynamic-sql

我必须执行动态SQL SELECT查询并将结果放入#TempTable

DECLARE @StateId CHAR(3)='StateID';  
DECLARE @DeptId CHAR(15)='DeptID';  
DECLARE @Query VARCHAR(MAX)='Select Columns With Joins Passed From Front End'  
DECLARE @Where VARCHAR(500);  
DECLARE @FinalQuery VARCHAR(MAX)='';  
SET @Where='Some Where Condition';  
SET @FinalQuery='SELECT '+@Query+' '+@Where+''  
EXEC(@FinalQuery) -- Want To INSERT THIS Result IN SOME `#TempTable` 
                  -- SO that I can perform Some Operations On `#TempTable`

ALSO否从动态SQL SELECT返回的列是动态的。

谢谢,

3 个答案:

答案 0 :(得分:4)

尝试以下示例

DECLARE @StateId CHAR(3)='StateID';  
DECLARE @DeptId CHAR(15)='DeptID';  
DECLARE @Query VARCHAR(MAX)='*'  -- here you pass your query
DECLARE @Where VARCHAR(500);  
DECLARE @FinalQuery VARCHAR(MAX)='';  
SET @Where='from tablename where condition';  
SET @FinalQuery='SELECT '+@Query+' INTO #temptablename '+@Where;
EXEC(@FinalQuery) 

请注意 :如果你需要在sp执行后使用temtable然后使用##而不是#然后我们可以访问它或者我们可以使用持久临时表

答案 1 :(得分:0)

请确保您的查询语句正确无误。 在存储过程中尝试此操作并检查输出结果(复制结果并执行它)

....
SET @FinalQuery='SELECT '+@Query+' '+@Where+'    
PRINT(@FinalQuery)
....

您可以使用 SQL Profiler 工具进行调试

答案 2 :(得分:0)

试试这个...... 首先创建进一步计算所需的临时表。

CREATE TABLE #TEMP     (     STATEID INT,     DEPTID INT     )

DECLARE @STATEID CHAR(10)='STATEID';  
DECLARE @DEPTID CHAR(15)='DEPTID';  
DECLARE @QUERY VARCHAR(MAX)='INSERT INTO #TEMP_TABLE 
                             SELECT COLUMNS WITH JOINS PASSED FROM FRONT END'  
DECLARE @WHERE VARCHAR(500);  
DECLARE @FINALQUERY VARCHAR(MAX)=''  
SET @WHERE='SOME WHERE CONDITION'

SET @FINALQUERY=+@QUERY+' '+@WHERE+''  -- REMOVED SELECT 
EXEC(@FINALQUERY)