Crear tabla temporal desde SQL dinámico con parámetros.
Aquí está mi problema. Necesito crear una tabla temporal después de ejecutar SQL dinámico y pasar parámetros de la siguiente manera:
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
El código anterior funciona. ¿Cómo obtengo los resultados en una tabla temporal?
He intentado:
CREATE TABLE #T1 (col1 varchar(50), col2 varchar(50) )
INSERT INTO #T1
EXECUTE @sql -- no funcionó
INSERT INTO #T1
EXECUTE (@sql, @PDef, @param1 = @param1, @localparam1 = @localparam1) -- tampoco funcionó
EDICIÓN: Había revisado los siguientes ejemplos al usar EXECUTE
https://stackoverflow.com/questions/662049/dynamic-sql-results-into-temp-table-in-sql-stored-procedure y por eso usé EXECUTE
La respuesta aceptada fue:
INSERT INTO #T1 execute (‘execute ‘ + @SQLString)
omitir el ‘execute’ si la cadena SQL es algo distinto a un procedimiento
Ahora ve los comentarios de esa respuesta aceptada en esa pregunta 🙂
davy.ai
Para obtener los resultados de la consulta SQL dinámica en una tabla temporal, un enfoque es modificar la variable @sql para incluir una cláusula INTO que especifique el nombre de la tabla temporal. Por ejemplo:
Luego, después de ejecutar el SQL dinámico con sp_executesql, simplemente puedes seleccionar el contenido de la tabla temporal: