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

Consulta Recursiva

Estas en el tema de Consulta Recursiva en el foro de SQL Server en Foros del Web. Buenos días: Tengo una base de datos que cada año crea una nueva tabla de Apuntes, la tabla se llama APUNXX siendo XX los últimos ...
  #1 (permalink)  
Antiguo 15/02/2013, 07:17
 
Fecha de Ingreso: febrero-2013
Mensajes: 2
Antigüedad: 11 años, 2 meses
Puntos: 0
Pregunta Consulta Recursiva

Buenos días:

Tengo una base de datos que cada año crea una nueva tabla de Apuntes, la tabla se llama APUNXX siendo XX los últimos dígitos de año.

El año pasado cree la siguiente consulta para sacar un listado:

SELECT TAL_VEHCLI.mat, TAL_VEHCLI.mar, TAL_VEHCLI.mod, TAL_VEHCLI.cha, TAL_VEHCLI.compro, TAL_VEHCLI.compre, TAL_VEHCLI.comdoc, substring(con, 5,9) as fact_com, TAL_VEHCLI.comfec, APU.num, APU.fec, APU.cue, APU.con, APU.fac, APU.doc, APU.impeu AS BASE, APU.acl
FROM TAL_VEHCLI LEFT OUTER JOIN APUN12 AS APU ON CHARINDEX(TAL_VEHCLI.cha, APU.con) <> 0 AND APU.cue LIKE '6001%'
WHERE TAL_VEHCLI.comfec<='&&Rango_1_1&&' AND (TAL_VEHCLI.tveh = 1) and (((TAL_VEHCLI.venfec is NULL) and TAL_VEHCLI.cli='000001') or TAL_VEHCLI.venfec>'&&Rango_1_1&&')
ORDER BY TAL_VEHCLI.cha

El problema que tengo es que este año necesitare sacar registros tanto de APUN12 como de APUN13 y el año que viene necesitare sacar información de las 3 tablas pero no se como hacer una consulta recursiva cambiando la base de datos.

Un saludo

Última edición por beagisbert; 15/02/2013 a las 07:34
  #2 (permalink)  
Antiguo 15/02/2013, 09:07
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: Consulta Recursiva

aqui creo que necesitas mas bien ejecutar un query dinamico...algo por este estilo


Código SQL:
Ver original
  1. DECLARE @YEAR INT
  2. DECLARE @inicio INT
  3. DECLARE @query VARCHAR(MAX)
  4.  
  5. SET @inicio=2012
  6. SET @YEAR=datepart(yyyy,getdate())
  7. SET @query='select * from apun ' + CONVERT(VARCHAR(20),@inicio) UNION '
  8. while @inicio<=@year
  9. begin
  10. if @inicio=@year
  11. set @query=@query + 'SELECT * FROM apun ' + convert(varchar(20),@inicio)'
  12. ELSE
  13. SET @query='select * from apun ' + CONVERT(VARCHAR(20),@inicio) UNION '
  14.  
  15. set @inicion=@inicio+1
  16. end
  17.  
  18. exec sp_sqlexec @query

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 16/02/2013, 14:03
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Consulta Recursiva

La solución de Libras a tu problema es absolutamente correcta,
el asunto es que tu problema no es correcto..

En este caso debes utilizar Partition: tener una sola tabla dividida en particiones, y añadir cada año una nueva partición.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 18/02/2013, 02:34
 
Fecha de Ingreso: febrero-2013
Mensajes: 2
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Consulta Recursiva

La bas de datos me la proporciona el programa de gestion de empresas de mi cliente con lo que no ha opción a tener una sola tabla.
Probare con tu solución
muchas gracias

Etiquetas: server
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 04:38.