-1

Here is my issue. I need to create a temp table after executing dynamic SQL and passing params as follows

CREATE PROCEDURE SP1
    @param1 varchar(50),
    @param2 varchar(50)
AS
BEGIN
    DECLARE @PDef varchar(300)
    DECLARE @sql  varchar(300)
    DECLARE @localparam1 varchar(300)
    DECLARE @localparam2 varchar(300)

    SET @localparam1 = ....
    SET @localparam2 = ....
 
    SET @PDef = '@param1 varchar(50), @localparam1 varchar(300)'

    SET @sql = 'SELECT * FROM TABL1 WHERE COL1 = @param1, COL2 in (@localparam1)'
 
    EXEC sp_Executesql @sql, @PDef, 
                            @param1 = @param1, @localparam1 = @localparam1

The above works. How do I get the results into a temp table?

I tried

CREATE TABLE #T1 (col1 varchar(50), col2 varchar(50) )

INSERT INTO #T1 
    EXECUTE @sql    -- didn't work    

INSERT INTO #T1 
    EXECUTE (@sql, @PDef, @param1 = @param1, @localparam1 = @localparam1)   -- didn't work either

EDIT: Had Looked at the following samples while using EXECUTE Dynamic SQL results into temp table in SQL Stored procedure and hence used EXECUTE The accepted answer was: INSERT into #T1 execute ('execute ' + @SQLString ) omit the 'execute' if the sql string is something other than a procedure

Now see the comments to that accepted answer that question that accepted answer :-)

N. Kaufman
  • 81
  • 1
  • 2
  • 9

1 Answers1

3

You've removed sp_executesql from your query for some reason. You can't called sys.sp_executesql if you don't tell SQL Server to:

INSERT INTO #T1
EXECUTE sys.sp_executesql @sql;

INSERT INTO #T1
EXECUTE sys.sp_executesql @sql,
                          @PDef,
                          @param1 = @param1,
                          @localparam1 = @localparam1;
Thom A
  • 88,727
  • 11
  • 45
  • 75