He llegado a un punto muerto. Tengo una consulta generada por algún C#
código. La consulta funciona bien Microsoft SQL Server Management Studio
cuando se ejecuta en la misma base de datos.
Sin embargo, cuando mi código intenta ejecutar la misma consulta, obtengo el mismo error sobre una columna no válida y se lanza una excepción. Todas las consultas que hacen referencia a esta columna fallan.
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 fallan cuando se ejecutan en código porque cree que falta la columna.
¿Algunas ideas?
sql
sql-server
kidl33t
fuente
fuente
Respuestas:
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í comouserid.PerfDiag
).Cuando tiene una referencia no calificada a un objeto de esquema (como una tabla), una no calificada por el nombre del esquema, la referencia del objeto debe resolverse. La resolución de nombres se produce al buscar en la siguiente secuencia un objeto del tipo apropiado (tabla) con el nombre especificado. El nombre se resuelve en la primera coincidencia:
La referencia no calificada está vinculada a la primera coincidencia en la secuencia anterior.
Como práctica general recomendada, siempre se deben calificar las 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 la consulta, ya que el esquema al que estaba vinculada la referencia puede cambiar dependiendo de las credenciales que ejecutan el procedimiento almacenado o la consulta. Esto da como resultado la recompilación de la consulta / procedimiento almacenado, un impacto de rendimiento. Las recompilaciones hacen que se eliminen los bloqueos de compilación, lo que impide que otros accedan a los recursos necesarios.
La resolución de nombres ralentiza la ejecución de la consulta ya que se deben realizar dos sondeos para resolver la versión probable del objeto (la propiedad de 'dbo'). Este es el caso habitual. La única vez que una sola sonda resolverá el nombre es si el usuario actual posee un objeto del nombre y tipo especificados.
[Editado para ampliar la nota]
Las otras posibilidades son (sin ningún orden en particular):
Verifique sus 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.
fuente
Simplemente presione Ctrl+ Shift+ Ry vea ...
En SQL Server Management Studio, Ctrl + Shift + R actualiza la caché local.
fuente
Si está ejecutando esto dentro de una transacción y una declaración SQL antes de que esto elimine / altere la tabla, también puede recibir este mensaje.
fuente
Finalmente apagué y reinicié Microsoft SQL Server Management Studio; y eso me lo arregló. Pero en otras ocasiones, bastaba con iniciar una nueva ventana de consulta.
fuente
Si está utilizando 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.
fuente
Simplemente 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, SQL Server Management Studio no capturó esto y se quejó de nombres de columna no válidos.
Lo que simplemente hice fue crear una nueva consulta, copiar y pegar el código SQL de la consulta anterior a esta nueva consulta y ejecutarla nuevamente. Esto pareció refrescar el ambiente correctamente.
fuente
En mi caso, reinicio Microsoft SQL Sever Management Studio y esto funciona bien para mí.
fuente
En mi caso, estaba tratando de obtener el valor de un ResultSet incorrecto al consultar múltiples declaraciones SQL.
fuente
En mi caso, parece que el problema fue un extraño problema de almacenamiento en caché. Las soluciones anteriores no funcionaron.
Si su código funcionaba bien y agregó una columna a una de sus tablas y le da el error 'nombre de columna no válido', y las soluciones anteriores no funcionan, intente esto: Primero ejecute solo la sección de código para crear esa modificación table y luego ejecute todo el código.
fuente
Incluyendo esta respuesta porque este fue el resultado principal para "sql de nombre de columna no válido" en Google y no vi esta respuesta aquí. En mi caso, obtenía un nombre de columna no válido, Id1 porque había usado la identificación incorrecta en mi declaración .HasForeignKey en mi código de Entity Framework C #. Una vez que lo cambié para que coincida con la identificación del objeto .HasOne (), el error desapareció.
fuente
Recibí este error al ejecutar una función escalar usando un valor de tabla, pero a la instrucción Select en mi cláusula RETURN de función escalar le faltaba la parte "FROM table". : palmas faciales:
fuente
También sucede cuando olvida cambiar ConnectionString y pregunta a una tabla que no tiene idea de los cambios que está realizando localmente.
fuente