Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/02/2012, 10:26
Avatar de AWesker
AWesker
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 16 años, 1 mes
Puntos: 27
Respuesta: Alternativa a Insert Exec Anidado

Gracias por responder Andres95

En cuanto a las columnas dinámicas, en realidad es un pivot y este me devuelve las columnas (por cierto, abrí este tema porque no encontraba solución). Que por cierto, se convierte en el primer execute sp_executesql.

Esto es lo que hace el primer procedimiento (SP_ABC):
Código SQL:
Ver original
  1. --Por si ha quedado en memoria por algún error
  2. IF OBJECT_ID('tempdb..##Tmp_001') IS NOT NULL
  3. BEGIN
  4.     DROP TABLE ##Tmp_001
  5. END
  6.  
  7. @SentenciaSQL = N'SELECT * FROM (ABC) AS PIV PIVOT Sum(Monto) FOR ....'
  8.  
  9. --Primer uso de EXECUTE (asumiendo que ya la tabla ##Tmp_001 ya esta en memoria
  10. INSERT INTO ##Tmp_001 EXEC(@SentenciaSQL)
  11.  
  12. --Después hago inner join con esta tabla temporal (##Tmp_001) ya que debo presentar otros datos:
  13. SELECT * FROM (
  14.    SELECT X FROM ABC...
  15. )AS Qry LEFT JOIN ##Tmp_001
  16. ON Qry.Codigo = ##Tmp_001.Codigo

Esto es lo que hace el segundo procedimiento
Código SQL:
Ver original
  1. --Verificando si ya existe la tabla
  2. IF OBJECT_ID('tempdb..##Tmp_002') IS NOT NULL
  3. BEGIN
  4.     DROP TABLE ##Tmp_002
  5. END
  6.  
  7. --Aquí voy a traer las columnas utilizando [B]parte[/B] de la lógica del pivot
  8. @SentenciaTmp = N'CREATE TABLE ##Tmp_002'
  9. --Aquí me genera el error:
  10. INSERT #Tmp_002 EXEC SP_ABC @Parametro01, @Parametro02
  11.  
  12. --Después continua una rutina de eliminación de la tabla

Gracias por el tiempo...