Eu cheguei a um pequeno impasse. Eu tenho uma consulta que é gerada por algum C#
código. A consulta funciona bem Microsoft SQL Server Management Studio
quando executada no mesmo banco de dados.
No entanto, quando meu código tenta executar a mesma consulta, recebo o mesmo erro sobre uma coluna inválida e uma exceção é lançada. Todas as consultas que fazem referência a esta coluna estão falhando.
A coluna em questão foi adicionada recentemente ao banco de dados. É uma coluna de data chamada Incident_Begin_Time_ts
.
Um exemplo que falha é:
select * from PerfDiag
where Incident_Begin_Time_ts > '2010-01-01 00:00:00';
Outras consultas como Select MAX(Incident_Being_Time_ts);
também falham quando executadas no código porque pensa que a coluna está ausente.
Alguma ideia?
sql
sql-server
kidl33t
fonte
fonte
Respostas:
Suspeito que você tenha duas tabelas com o mesmo nome. Um pertence ao esquema 'dbo' (
dbo.PerfDiag
) e o outro pertence ao esquema padrão da conta usada para se conectar ao SQL Server (algo semelhanteuserid.PerfDiag
).Quando você tem uma referência não qualificada a um objeto de esquema (como uma tabela) - um não qualificado pelo nome do esquema - a referência do objeto deve ser resolvida. A resolução de nomes ocorre pesquisando na seqüência a seguir por um objeto do tipo apropriado (tabela) com o nome especificado. O nome resolve para a primeira correspondência:
A referência não qualificada é vinculada à primeira correspondência na sequência acima.
Como prática geral recomendada, deve-se sempre qualificar referências a objetos de esquema, por motivos de desempenho:
Uma referência não qualificada pode invalidar um plano de execução em cache para o procedimento armazenado ou consulta, já que o esquema ao qual a referência foi associada pode mudar dependendo das credenciais que executam o procedimento armazenado ou consulta. Isso resulta na recompilação da consulta / procedimento armazenado, um impacto no desempenho. Recompilações fazem com que bloqueios de compilação sejam retirados, impedindo que outros acessem o (s) recurso (s) necessário (s).
A resolução de nomes retarda a execução da consulta, pois duas sondagens devem ser feitas para resolver a versão provável do objeto (que pertence a 'dbo'). Este é o caso usual. A única vez que uma única investigação resolverá o nome é se o usuário atual possuir um objeto com o nome e tipo especificados.
[Editado para nota posterior]
As outras possibilidades são (sem ordem específica):
Verifique novamente suas strings de conexão e certifique-se de que elas especifiquem explicitamente o nome da instância do SQL Server e o nome do banco de dados.
fonte
Basta pressionar Ctrl+ Shift+ Re ver ...
No SQL Server Management Studio, Ctrl + Shift + R atualiza o cache local.
fonte
Se você estiver executando isso dentro de uma transação e uma instrução SQL antes de eliminar / alterar a tabela, você também pode obter esta mensagem.
fonte
Finalmente desliguei e reiniciei o Microsoft SQL Server Management Studio; e isso resolveu para mim. Mas em outras ocasiões, apenas iniciar uma nova janela de consulta era o suficiente.
fonte
Se você estiver usando variáveis com o mesmo nome de sua coluna, pode ser que você tenha esquecido o marcador de variável '@'. Em uma instrução INSERT, ele será detectado como uma coluna.
fonte
Apenas tive exatamente o mesmo problema. Renomei algumas colunas com alias em uma tabela temporária que é usada posteriormente por outra parte do mesmo código. Por algum motivo, isso não foi capturado pelo SQL Server Management Studio e ele se queixou de nomes de coluna inválidos.
O que eu simplesmente fiz foi criar uma nova consulta, copiar e colar o código SQL da consulta antiga para esta nova consulta e executá-la novamente. Isso pareceu refrescar o ambiente corretamente.
fonte
No meu caso, reinicio o Microsoft SQL Server Management Studio e isso funciona bem para mim.
fonte
No meu caso, estava tentando obter o valor do ResultSet errado ao consultar várias instruções SQL.
fonte
No meu caso, parece que o problema era um problema estranho de cache. As soluções acima não funcionaram.
Se seu código estava funcionando bem e você adicionou uma coluna a uma de suas tabelas e deu o erro 'nome de coluna inválido', e as soluções acima não funcionaram, tente isto: Primeiro execute apenas a seção de código para criar aquela modificação tabela e, em seguida, execute todo o código.
fonte
Incluindo esta resposta porque este foi o resultado principal para "sql de nome de coluna inválido" no google e não encontrei essa resposta aqui. No meu caso, estava recebendo o nome de coluna inválido, Id1, porque usei a id errada em minha instrução .HasForeignKey em meu código C # do Entity Framework. Depois de alterá-lo para corresponder ao id do objeto .HasOne (), o erro desapareceu.
fonte
Recebi este erro ao executar uma função escalar usando um valor de tabela, mas a instrução Select em minha cláusula RETURN da função escalar estava faltando a parte "Tabela FROM". : facepalms:
fonte
Também acontece quando você se esquece de mudar o ConnectionString e pergunta a uma mesa que não tem ideia sobre as mudanças que você está fazendo localmente.
fonte