Esto es un caso raro cuando se utilizan vistas. Generalmente se usan las vistas para disminuir la complejidad de las consultas. Y aveces se cambian los nombres de las tablas base que se usan con el mismo proposito.
Veamos que es lo raro. Si tenemos una vista, como la siguiente:
CREATE VIEW dbo.view_ajustes
AS
SELECT
dbo.Puntosventa.nombre AS PuntoVenta, dbo.productos.nombre AS ProductoVenta, dbo.ajustes.preciounitario AS Precio, dbo.ajustes.cantidad
FROM PuntosVenta inner join Productos on PuntosVenta.IdPuntoVenta = Productos.IdPuntoVenta inner join ajustes on productos.idproducto=ajustes.idproducto
Si se quiere realizar una consulta a esa vista:
select puntoventa,productoventa,preciounitario,cantidad
from view_ajustes
Se ejecuta sin error, dando como resultado las filas deseadas. Ahora utilizaremos la vista en una subconsulta.
select *
from puntosventa
where nombre in (select nombre from view_ajustes)
Esta consulta se ejecutará sin errores. Pero chequeenla. En la subconsulta se está utilizando la columna 'nombre' que no existe en la vista view_ajustes y no el campo 'puntoventa'. Aún así no hay errores y Sql Server puede "descifrar" a traves de la vista el nombre de la columna en la tabla base. Pues la columna 'nombre' si existe en la tabla base puntosventa.
Es más como en la misma vista se utilizan dos columnas con el mismo identificador 'nombre' de dos tablas diferentes, la anterior consulta se puede modificar para consultar la tabla productos, sin errores también.
select *
from productos
where nombre in (select nombre from view_ajustes)
Conclusión: Debe ser una "característica" en Sql Server 2000 (también pasa si prueban en Sql Server 2005), mediante la cual en una subconsulta que utilizan vistas, no importa utilizar el identificador utilizado en la vista o el identificador de la tabla base.
Fuente:
Sql Server Central.
Caso raro de Vistas en Subconsultas
Etiquetas:
caso,
Sql server,
vistas
Technorati tags:
caso,
Sql server,
vistas
Blogalaxia tags:
caso,
Sql server,
vistas
PeruBlogs tags:
caso,
Sql server,
vistas
Suscribirse a:
Enviar comentarios (Atom)
Los mas leídos en este blog
- Visual Basic y Sql Server con Ado Data Control
- Sentencia Where con condicionales
- Diferencia entre Truncate y Delete
- Como hacer una consulta por fecha en Sql Server
- Programar para Pocket PC 2003: Como probar una aplicación que desarrollemos
- Backups con WinRar de Bases de Datos
- Usar teclas de función
- Auditando Tablas y Bases de Datos en Sql Server
No hay comentarios:
Publicar un comentario