Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problemas Con Consulta Dinamica

Estas en el tema de Problemas Con Consulta Dinamica en el foro de SQL Server en Foros del Web. hola, tengo un pequeño problema con una consulta dinamica que acabo de implementar, les comparto el codigo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original DECLARE @cont ...
  #1 (permalink)  
Antiguo 23/07/2013, 11:23
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Problemas Con Consulta Dinamica

hola, tengo un pequeño problema con una consulta dinamica que acabo de implementar, les comparto el codigo:
Código SQL:
Ver original
  1. DECLARE @cont INT
  2. DECLARE @sqlquery VARCHAR(1000)
  3. DECLARE @sqlquery2 VARCHAR(500)
  4. DECLARE @sqlquery3 VARCHAR(2000)
  5. DECLARE @anho VARCHAR(4)
  6.  
  7. SET nocount ON
  8.  
  9. DROP TABLE ti
  10.  
  11. SET @anho = (SELECT YEAR(getdate()))
  12. SET @cont = 1
  13. SET @sqlquery = ''
  14.  
  15. while @cont <= 12
  16. BEGIN
  17.  
  18. SET @sqlquery2 = '(a.['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+']+b.['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+']+c.['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+']+d.['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+']) as ['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+'],'
  19. EXEC (@sqlquery2)
  20.  
  21. SET @sqlquery = @sqlquery + @sqlquery2
  22. EXEC (@sqlquery)
  23.  
  24. SET @Cont = @Cont + 1
  25. END
  26.  
  27. EXEC(@sqlquery)
  28.  
  29. SET @sqlquery3 = 'select a.gestion,'+@sqlquery+' '+quotename('GES08','''')+' as COD_GES into ti from Llamadas_Mensual_Oro_Final a inner join Llamadas_Mensual_plata_Final b on a.gestion = b.gestion inner join Llamadas_Mensual_Reten_Final c on b.gestion = c.gestion inner join Llamadas_Mensual_cable_Final d on c.gestion = d.gestion'
  30.  
  31. EXEC(@sqlquery3)
  32.  
  33. SET nocount off
  34.  
  35. SELECT * FROM ti

lo que sucede es que la consulta se ejecuta sin problemas(incluyendo dentro de un SP) pero al momento de ejecutarse, muestra mensajes de alerta(errores) indicando lo siguiente: Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'a'.
las veces que especifique en el contador.
la consulta seria como ocultar estos mensajes de alerta, ya que el query
  #2 (permalink)  
Antiguo 23/07/2013, 12:36
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas Con Consulta Dinamica

Primero, cambia el exec(@sqlquery3), EXEC SP_EXECUTESQL @sqlquery3

Segundo, antes de mandar a ejecutar, dale un PRINT a tu cadena y verifica que este bien

¿Como quitar los mensajes de alerta?

SET NOCOUNT ON
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 23/07/2013, 12:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas Con Consulta Dinamica

que es lo que quieres hacer?? ejecute parte de tu codigo y no entiendo porque haces esto:
Código SQL:
Ver original
  1. EXEC (@sqlquery2)

ni porque haces esto
Código SQL:
Ver original
  1. EXEC (@sqlquery)
si ahi no tienes ningun query, quizas lo que querias hacer era un
Código SQL:
Ver original
  1. print @sqlquery2

el unico query que realmente funciona es el ultimo y es el unico donde deberia de ir el exec......

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por gnzsoloyo; 23/07/2013 a las 17:31
  #4 (permalink)  
Antiguo 23/07/2013, 13:36
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: Problemas Con Consulta Dinamica

hola, pues en realidad, lo que deseo hacer es la siguiente consulta SQL pero de manera dinamica:
Código SQL:
Ver original
  1. SELECT a.gestion,
  2. (a.[201301]+b.[201301]+c.[201301]+d.[201301]) AS [201301],
  3. (a.[201302]+b.[201302]+c.[201302]+d.[201302]) AS [201302],
  4. (a.[201303]+b.[201303]+c.[201303]+d.[201303]) AS [201303],
  5. (a.[201304]+b.[201304]+c.[201304]+d.[201304]) AS [201304],
  6. (a.[201305]+b.[201305]+c.[201305]+d.[201305]) AS [201305],
  7. (a.[201306]+b.[201306]+c.[201306]+d.[201306]) AS [201306],
  8. (a.[201307]+b.[201307]+c.[201307]+d.[201307]) AS [201307],
  9. (a.[201308]+b.[201308]+c.[201308]+d.[201308]) AS [201308],
  10. (a.[201309]+b.[201309]+c.[201309]+d.[201309]) AS [201309],
  11. (a.[201310]+b.[201310]+c.[201310]+d.[201310]) AS [201310],
  12. (a.[201311]+b.[201311]+c.[201311]+d.[201311]) AS [201311],
  13. (a.[201312]+b.[201312]+c.[201312]+d.[201312]) AS [201312], 'GES08' AS COD_GES
  14. FROM Llamadas_Mensual_Oro_Final a INNER JOIN Llamadas_Mensual_plata_Final b
  15. ON a.gestion = b.gestion
  16. INNER JOIN Llamadas_Mensual_Reten_Final c
  17. ON b.gestion = c.gestion
  18. INNER JOIN Llamadas_Mensual_cable_Final d
  19. ON c.gestion = d.gestion

el cual el valor año se tome del año del sistema y para los meses solo use los numeros del 1 al 12 concatenandolos como texto a cada uno....
  #5 (permalink)  
Antiguo 23/07/2013, 13:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas Con Consulta Dinamica

Código SQL:
Ver original
  1. DECLARE @cont INT
  2. DECLARE @sqlquery VARCHAR(1000)
  3. DECLARE @sqlquery2 VARCHAR(500)
  4. DECLARE @sqlquery3 VARCHAR(2000)
  5. DECLARE @anho VARCHAR(4)
  6.  
  7. SET nocount ON
  8.  
  9.  
  10. SET @anho = (SELECT YEAR(getdate()))
  11. SET @cont = 1
  12. SET @sqlquery = ''
  13.  
  14. while @cont <= 12
  15. BEGIN
  16.  
  17. SET @sqlquery2 = '(a.['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+']+b.['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+']+c.['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+']+d.['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+']) as ['+@anho + RIGHT('00'+CAST(@cont AS VARCHAR),2)+'],'
  18. --exec (@sqlquery2)
  19.  
  20. SET @sqlquery = @sqlquery + @sqlquery2
  21. --exec (@sqlquery)
  22.  
  23. SET @Cont = @Cont + 1
  24. END
  25.  
  26. --exec(@sqlquery)
  27.  
  28. SET @sqlquery3 = 'select a.gestion,'+@sqlquery+' '+quotename('GES08','''')+' as COD_GES into ti from Llamadas_Mensual_Oro_Final a inner join Llamadas_Mensual_plata_Final b on a.gestion = b.gestion inner join Llamadas_Mensual_Reten_Final c on b.gestion = c.gestion inner join Llamadas_Mensual_cable_Final d on c.gestion = d.gestion'
  29.  
  30. EXECUTE sp_executesql(@sqlquery3)

con eso obtienes lo que necesitas, pregunta para que es la tabla "ti"?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 23/07/2013, 13:57
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: Problemas Con Consulta Dinamica

bueno, en realidad si, ya pude ejecutar mi consulta sin problemas, jejeje
con respecto a la tabla ti, es solo de prueba, para ver si se muestran los valores que deberia ser....
gracias @Libras

Etiquetas: dinamica, join, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:57.