Consider the following code:
SET @SQL1 = \'SELECT * INTO #temp WHERE ...\'
exec(@SQL1)
SELECT * from #temp (this line throws an error that #temp doesn\'t ex
Try ##temp Because your dynamic query is executed on an other fibre so you cannot see its local temporay table. instead if you declare your temporary table like global it make a sens.
You can create temp before exec and use exec to populate the temp table.
An example, look at "into"
SELECT o.OrderID, o.OrderDate, od.UnitPrice, od.Quantity,
c.CustomerID, c.CompanyName, c.Address, c.City, c.Region,
c.PostalCode, c.Country, c.Phone, p.ProductID,
p.ProductName, p.UnitsInStock, p.UnitsOnOrder
INTO #temp
FROM Orders o
JOIN [Order Details] od ON o.OrderID = od.OrderID
JOIN Customers c ON o.CustomerID = c.CustomerID
JOIN Products p ON p.ProductID = od.ProductID
Didn't find a workable solution that did everything I needed so I switched to using ##global temp tables instead.
Another method is to use all code inside the dynamic SQL
SET @SQL1 = 'SELECT * INTO #temp WHERE ...
SELECT * from #temp '
exec(@SQL1)
Can you not put your select after the insert into with a ; delimeter and run the two statements together?