tipos - SQL Server informa ''Nombre de columna inválido'', pero la columna está presente y la consulta funciona a través del estudio de administración
tablas catalogo sql server (6)
En mi caso, estaba tratando de obtener el valor de ResultSet equivocado al consultar múltiples sentencias de SQL.
Me he topado con un callejón sin salida. Tengo una consulta generada por algún código C#
. La consulta funciona bien en Microsoft SQL Server Management Studio
cuando se ejecuta contra la misma base de datos.
Sin embargo, cuando mi código intenta ejecutar la misma consulta, recibo el mismo error acerca de una columna no válida y se lanza una excepción. Todas las consultas que hacen referencia a esta columna están fallando.
La columna en cuestión se agregó recientemente a la base de datos. Es una columna de fecha llamada Incident_Begin_Time_ts
.
Un ejemplo que falla es:
select * from PerfDiag
where Incident_Begin_Time_ts > ''2010-01-01 00:00:00'';
Otras consultas como Select MAX(Incident_Being_Time_ts);
también falla cuando se ejecuta en código porque cree que falta la columna.
¿Algunas ideas?
Si está ejecutando esto dentro de una transacción y una declaración SQL antes de que esto cambie / modifique la tabla, también puede recibir este mensaje.
Si usa variables con el mismo nombre que su columna, es posible que haya olvidado el marcador de variable ''@''. En una instrucción INSERT se detectará como una columna.
Simplemente presiona Ctrl + Shift + R y mira ...
En SQL Server Management Studio, Ctrl + Shift + R refresca la memoria caché local.
Solo tuve exactamente el mismo problema. Cambié el nombre de algunas columnas con alias en una tabla temporal que luego es utilizada por otra parte del mismo código. Por alguna razón, esto no fue capturado por SQL Server Management Studio y se quejó de los nombres de columna no válidos.
Lo que simplemente hice fue crear una nueva consulta, copiar pegar el código SQL de la consulta anterior a esta nueva consulta y ejecutarlo nuevamente. Esto pareció refrescar el ambiente correctamente.
Sospecho que tienes dos mesas con el mismo nombre. Uno es propiedad del esquema ''dbo'' ( dbo.PerfDiag
), y el otro es propiedad del esquema predeterminado de la cuenta utilizada para conectarse a SQL Server (algo así como userid.PerfDiag
).
Cuando tiene una referencia no calificada a un objeto de esquema (como una tabla), uno que no está calificado por el nombre del esquema, la referencia del objeto debe resolverse. La resolución del nombre ocurre al buscar en la siguiente secuencia un objeto del tipo apropiado (tabla) con el nombre especificado. El nombre se resuelve en la primera coincidencia:
- En el esquema predeterminado del usuario.
- Bajo el esquema ''dbo''.
La referencia no calificada está ligada a la primera coincidencia en la secuencia anterior.
Como práctica general recomendada, siempre se deben calificar referencias a objetos de esquema, por razones de rendimiento:
Una referencia no calificada puede invalidar un plan de ejecución almacenado en caché para el procedimiento almacenado o consulta, ya que el esquema al cual se vinculó la referencia puede cambiar dependiendo de las credenciales que ejecutan el procedimiento almacenado o la consulta. Esto resulta en la recompilación del procedimiento consulta / almacenado, un golpe de rendimiento. Las recompilaciones provocan que se eliminen los bloqueos de compilación, lo que impide que otros accedan a los recursos necesarios.
La resolución del nombre ralentiza la ejecución de la consulta ya que se deben realizar dos sondeos para resolver la versión probable del objeto (propiedad de ''dbo''). Este es el caso habitual. La única vez que una única sonda resolverá el nombre es si el usuario actual posee un objeto del nombre y tipo especificado.
[Editado para una nota adicional]
Las otras posibilidades son (sin ningún orden en particular):
- No estás conectado a la base de datos que crees que eres.
- No estás conectado a la instancia de SQL Server que crees que eres.
Verifique dos veces las cadenas de conexión y asegúrese de que especifiquen explícitamente el nombre de la instancia de SQL Server y el nombre de la base de datos.