I want to store the results into table with same name as per the condition. How to achieve the same ? Following is the code: While executing it throws error that #a already exists.
x
IF @Input ='1'
BEGIN
drop #a
SELECT *
INTO #a
FROM table1
END;
ELSE IF @Input ='2'
BEGIN
drop #a
SELECT *
INTO #a
FROM table2
END;
Advertisement
Answer
You can use this solution using a global temporary table (maybe not the best / safest solution). The statements get executed with EXECUTE
:
DECLARE @Input VARCHAR(20) = '1'
IF OBJECT_ID('tempdb..##a') IS NOT NULL
BEGIN
DROP TABLE ##a
END
IF @Input = '1'
EXEC ('SELECT * INTO ##a FROM table1;')
ELSE IF @Input = '2'
EXEC ('SELECT * INTO ##a FROM table2;')
-- you can implement steps here to create a local temporary table.
-- see: https://stackoverflow.com/questions/9534990/tsql-select-into-temp-table-from-dynamic-sql
SELECT * FROM ##a
Also have a look at this question: TSQL select into Temp table from dynamic sql. There is also described how you can get the data as local temporary table in two different ways (using a global temporary table or a view).
The problem using the EXECUTE
function is leaving the scope.