el numero maximo de tablas en una query ha sido excedido

29/11/2005 - 15:43 por .·:m·a·r·l·a:·. | Informe spam
Hola a todos ::


me he encontrado con el siguiente error ::

[Microsoft][ODBC SQL Server Driver][SQL Server]Could not allocate ancillary
table for view or function resolution. The maximun number of tables in a
query (256) was exceeded.

se que la vista que me da dicho error es completamente ineficiente, pero
pensamos utilizara tan solo ocasionalmente para checkear la integridad del
sistema, asi que el tiempo de ejecucion no es importante

tan solo se me ocurre ne la solucion de "cachear" parte de la vista a
diferentes tablas y hacer la vista luego con estas, pero eso supondria
bastante mantenimiento


hay alguna forma de evitar este limite de tablas ??


gracias por adelantado

Preguntas similare

Leer las respuestas

#6 Carlos Sacristán
30/11/2005 - 12:04 | Informe spam
Bueno, tal y como lo cuentas si no quieres trabajar mucho en rediseñarlo
todo, yo lo que haría sería crear un procedimiento almacenado que fuera
metiendo en tablas temporales todos aquellos datos que las vistas que
comentas que son en realidad la unión de 5 y 15 tablas e ir haciendo joins
con dichas tablas temporales.

Seguramente el rendimiento sea mejor y tampoco costaría mucho hacer este
cambio. ¿Cómo lo ves?


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

".·:m·a·r·l·a:·." escribió en el mensaje
news:
me doy cuenta del problema de mantenimiento, pero las tablas no cuelgan
directamente, son tablas a las que se refiere otras vistas incluidas en


esta
vista

te comento cual es mi intencion a grandes rasgos ::

tengo varias tablas de informacion sobre clientes (unas 8) en las cuales
diferentes sistemas/personas hacen inserciones mas otra con la masterdata
(nombre, pais...) de cada cliente

valores como pais o codigo de cliente van codificados mediante un codigo
unico (ejemplo, pais = ES en lugar de España)

cada una de estas tablas tiene una vista que devuelve todas las lineas mas
valores de otras tablas como lookups (ejemplo de pais, España,[tabla :
codigo - nombre] Europa ... [tabla codigo - continente]), asi que cada


una
de estas vistas llama entre 5 y 15 tablas

he aqui donde entra la vista problematica, la idea es crear una vista que
"una" resumenes de todas las tablas, empezando por el codigo cliente y
añadiendo masterdata si esta existe, lineas (count) para cada cliente de
cada una de las vistas que tiene cada tabla original, count distint de
diferentes campos...

y como los resultado tienen que mostrar todos los clientes, auque estos


solo
existan en una de las tablas y no el la tabla maestra, tengo que hacer una
union inicial para extraer todos los codigos de clientes

asi que, haciendo numeros :
- 8 tablas datos
- 1 tabla maestra
- 8 vistas cada una llamando entre 5 y 15 tablas
- union de las ultimas 8 vistas para extraer todos los codigos de cliente
(algunas tablas originales no contienen el numero cliente real, este es
calculado en la vista)
- join entre esta ultima vista y las 8 anteriores (la vista problematica)

acepto que la eficiencia es nula (demasiado complejo, datos demasiado
fragmentados...) y devido a que se va a utilizar poco no queria gastar
demasiado tiempo en rediseñar las vistas que ya estan hechas


lo que si es importante es que los datos sean lo mas actuales posibles,


esa
es la razon de hacerlo todo con vistas y no tablas cache intermedias, y lo
mas rapido que he pensado es en cambiar alguna configuracion en el


servidor
para que acepte mas de 256 tablas

perdon por el tocho escrito
alguna idea ??




"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> wrote in message
news:
> Pero por mucho que no te importe el rendimiento, que una vista


incluya
> más de 256 tablas me parece poco mantenible...¿Podrías postear esa vista


y
> lo que intentas hacer?
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> ".·:m·a·r·l·a:·." escribió en el mensaje
> news:#
> > Hola a todos ::
> >
> >
> > me he encontrado con el siguiente error ::
> >
> > [Microsoft][ODBC SQL Server Driver][SQL Server]Could not allocate
> ancillary
> > table for view or function resolution. The maximun number of tables in


a
> > query (256) was exceeded.
> >
> > se que la vista que me da dicho error es completamente ineficiente,


pero
> > pensamos utilizara tan solo ocasionalmente para checkear la integridad
del
> > sistema, asi que el tiempo de ejecucion no es importante
> >
> > tan solo se me ocurre ne la solucion de "cachear" parte de la vista a
> > diferentes tablas y hacer la vista luego con estas, pero eso supondria
> > bastante mantenimiento
> >
> >
> > hay alguna forma de evitar este limite de tablas ??
> >
> >
> > gracias por adelantado
> >
> >
>
>


Respuesta Responder a este mensaje
#7 .·:m·a·r·l·a:·.
01/12/2005 - 08:25 | Informe spam
me temo que es la unica forma que yo tambien veo posible

una preguntilla mas, de la misma forma que el propio SQL es capaz de contar
que hace falta mas de 256 tablas para ejecutar dicha query, hay alguna forma
para saber este valor para cada vista ??
(pensando en optimizacion y en encontrar cuales tablas son mas culpables)

gracias de nuevo


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> wrote in message
news:uu$
Bueno, tal y como lo cuentas si no quieres trabajar mucho en


rediseñarlo
todo, yo lo que haría sería crear un procedimiento almacenado que fuera
metiendo en tablas temporales todos aquellos datos que las vistas que
comentas que son en realidad la unión de 5 y 15 tablas e ir haciendo joins
con dichas tablas temporales.

Seguramente el rendimiento sea mejor y tampoco costaría mucho hacer


este
cambio. ¿Cómo lo ves?


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

".·:m·a·r·l·a:·." escribió en el mensaje
news:
> me doy cuenta del problema de mantenimiento, pero las tablas no cuelgan
> directamente, son tablas a las que se refiere otras vistas incluidas en
esta
> vista
>
> te comento cual es mi intencion a grandes rasgos ::
>
> tengo varias tablas de informacion sobre clientes (unas 8) en las cuales
> diferentes sistemas/personas hacen inserciones mas otra con la


masterdata
> (nombre, pais...) de cada cliente
>
> valores como pais o codigo de cliente van codificados mediante un codigo
> unico (ejemplo, pais = ES en lugar de España)
>
> cada una de estas tablas tiene una vista que devuelve todas las lineas


mas
> valores de otras tablas como lookups (ejemplo de pais, España,[tabla :
> codigo - nombre] Europa ... [tabla codigo - continente]), asi que cada
una
> de estas vistas llama entre 5 y 15 tablas
>
> he aqui donde entra la vista problematica, la idea es crear una vista


que
> "una" resumenes de todas las tablas, empezando por el codigo cliente y
> añadiendo masterdata si esta existe, lineas (count) para cada cliente de
> cada una de las vistas que tiene cada tabla original, count distint de
> diferentes campos...
>
> y como los resultado tienen que mostrar todos los clientes, auque estos
solo
> existan en una de las tablas y no el la tabla maestra, tengo que hacer


una
> union inicial para extraer todos los codigos de clientes
>
> asi que, haciendo numeros :
> - 8 tablas datos
> - 1 tabla maestra
> - 8 vistas cada una llamando entre 5 y 15 tablas
> - union de las ultimas 8 vistas para extraer todos los codigos de


cliente
> (algunas tablas originales no contienen el numero cliente real, este es
> calculado en la vista)
> - join entre esta ultima vista y las 8 anteriores (la vista


problematica)
>
> acepto que la eficiencia es nula (demasiado complejo, datos demasiado
> fragmentados...) y devido a que se va a utilizar poco no queria gastar
> demasiado tiempo en rediseñar las vistas que ya estan hechas
>
>
> lo que si es importante es que los datos sean lo mas actuales posibles,
esa
> es la razon de hacerlo todo con vistas y no tablas cache intermedias, y


lo
> mas rapido que he pensado es en cambiar alguna configuracion en el
servidor
> para que acepte mas de 256 tablas
>
> perdon por el tocho escrito
> alguna idea ??
>
>
>
>
> "Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> wrote in message
> news:
> > Pero por mucho que no te importe el rendimiento, que una vista
incluya
> > más de 256 tablas me parece poco mantenible...¿Podrías postear esa


vista
y
> > lo que intentas hacer?
> >
> >
> > Un saludo
> >
> > -
> > "Sólo sé que no sé nada. " (Sócrates)
> >
> > ".·:m·a·r·l·a:·." escribió en el mensaje
> > news:#
> > > Hola a todos ::
> > >
> > >
> > > me he encontrado con el siguiente error ::
> > >
> > > [Microsoft][ODBC SQL Server Driver][SQL Server]Could not allocate
> > ancillary
> > > table for view or function resolution. The maximun number of tables


in
a
> > > query (256) was exceeded.
> > >
> > > se que la vista que me da dicho error es completamente ineficiente,
pero
> > > pensamos utilizara tan solo ocasionalmente para checkear la


integridad
> del
> > > sistema, asi que el tiempo de ejecucion no es importante
> > >
> > > tan solo se me ocurre ne la solucion de "cachear" parte de la vista


a
> > > diferentes tablas y hacer la vista luego con estas, pero eso


supondria
> > > bastante mantenimiento
> > >
> > >
> > > hay alguna forma de evitar este limite de tablas ??
> > >
> > >
> > > gracias por adelantado
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#8 Miguel Egea
02/12/2005 - 00:13 | Informe spam
uff, odio las vistas que tiran de vistas que a su vez tiran de vistas, la
mayoría de las veces solo se usan por no volver a escribir el mismo código
(estoy siendo fundamentalista, perdonadme se que hay muchas más razones,
algunas de ellas muy buenas, para usar vistas).

Mi idea

Explota tu vista, eliminando todas y cada una de las vistas que tiene debajo
(sustituyendola por su contenido, si puedes de forma "inteligente", luego
explico lo que quiero decir) (saldrán 10xxx páginas de query).

Elimina todas las tablas que aparecen más de una vez y usalas tan solo 1
vez.
Elimina del select todos los campos que no te hacen falta, y todas las
tablas que necesitas usar por que están en tus vistas, pero que de nada
sirven en tu select...
Una vez que tengas esta reduccíon hecha, no deben quedar más tablas que hay
en tu nucleo, estimo que entre 10 y 30 tablas por los datos que dices e
intentando mojarme un poquito.

Nota. "sustituir el contenido de forma inteligente"

Select * from vista, puede ser sustituido de forma tonta por select * from
(select XXX . from ... inner ... where ...) as v, sin embargo estas
tablas derivadas pueden ayudarte en tu proceso si las mezclas con tablas
temporales (y que Tempdb nos pille confesados).

La forma inteligente sería lo que te decía antes, quitar las tablas
redundantes, y construir todo esto sin tablas derivadas, es decir uniendo
realmente las tablas...

Suerte


Miguel Egea
Visita mi web http://www.portalsql.com
SQL Server MVP, Mentor
Solid Quality Learning
http://www.SolidQualityLearning.com
"Solid Quality Learning is the trusted global provider of advanced education
and solutions for the entire Microsoft database platform"



".·:m·a·r·l·a:·." wrote in message
news:%
mas que error de diseño es la cantidad de tablas a las que se refiere

a mi tambien me sorprenden 256, pero muchas si que hay llamando otras
vistas
en cadena

a grandes rasgos ::

tengo varias tablas de informacion sobre clientes (unas 8) en las cuales
diferentes sistemas/personas hacen inserciones mas otra con la masterdata
(nombre, pais...) de cada cliente

valores como pais o codigo de cliente van codificados mediante un codigo
unico (ejemplo, pais = ES en lugar de España)

cada una de estas tablas tiene una vista que devuelve todas las lineas mas
valores de otras tablas como lookups (ejemplo de pais, España,[tabla :
codigo . nombre] Europa ... [tabla codigo - continente]), asi que cada
una
de estas vistas llama entre 5 y 15 tablas

he aqui donde entra la vista problematica, la idea es crear una vista que
"una" resumenes de todas las tablas, empezando por el codigo cliente y
añadiendo masterdata si esta existe, lineas (count) para cada cliente de
cada una de las vistas que tiene cada tabla original, count distint de
diferentes campos...

y como los resultado tienen que mostrar todos los clientes, auque estos
solo
existan en una de las tablas y no el la tabla maestra, tengo que hacer una
union inicial para extraer todos los codigos de clientes

asi que, haciendo numeros :
- 8 tablas datos
- 1 tabla maestra
- 8 vistas cada una llamando entre 5 y 15 tablas
- union de las ultimas 8 vistas para extraer todos los codigos de cliente
(algunas tablas originales no contienen el numero cliente real, este es
claculado en la vista)
- join entre esta ultima vista y las 8 anteriores (la vista problematica)

acepto que la eficiencia es nula (demasiado complejo, datos demasiado
fragmentados...) y devido a que se va a utilizar poco no queria gastar
demasiado tiempo en rediseñar las vistas que ya estan hechas


lo que si es importante es que los datos sean lo mas actuales posibles,
esa
es la razon de hacerlo todo con vistas y no tablas cache intermedias, y lo
mas rapido que he pensado es en cambiar alguna configuracion en el
servidor
para que acepte mas de 256 tablas

perdon por el tocho escrito
alguna idea ??



"Miguel Egea" wrote in message
news:
Marla si hay 256 tablas en un query, tiene por fuerza que haber un error


de
diseño, si quieres podemos intentar ver donde puede andar ese error e
intentar ayudarte a solventarlo.

Saludos cordiales
Miguel Egea
Visita mi web http://www.portalsql.com
SQL Server MVP, Mentor
Solid Quality Learning
http://www.SolidQualityLearning.com
"Solid Quality Learning is the trusted global provider of advanced


education
and solutions for the entire Microsoft database platform"

".·:m·a·r·l·a:·." wrote in message
news:%
> Hola a todos ::
>
>
> me he encontrado con el siguiente error ::
>
> [Microsoft][ODBC SQL Server Driver][SQL Server]Could not allocate
> ancillary
> table for view or function resolution. The maximun number of tables in
> a
> query (256) was exceeded.
>
> se que la vista que me da dicho error es completamente ineficiente,
> pero
> pensamos utilizara tan solo ocasionalmente para checkear la integridad


del
> sistema, asi que el tiempo de ejecucion no es importante
>
> tan solo se me ocurre ne la solucion de "cachear" parte de la vista a
> diferentes tablas y hacer la vista luego con estas, pero eso supondria
> bastante mantenimiento
>
>
> hay alguna forma de evitar este limite de tablas ??
>
>
> gracias por adelantado
>
>






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida