nome de objeto inválido do servidor sql - mas as tabelas estão listadas na lista de tabelas do SSMS


335

Estou tentando criar um Stored Procedurepara um banco de dados recém-criado. No entanto, o SSMSintellisense não reconhece mais da metade das tabelas que foram criadas.

Por exemplo, enquanto na coluna esquerda sob as tabelas eu tenho uma tabela dbo.Room, quando digito " dbo." na nova janela de consulta, essa tabela não é listada, na verdade, apenas 17 das 37 tabelas são listadas.

Não vejo diferença entre as tabelas listadas pelo intellisense e as que não são. Se eu digitar manualmente dbo.Room, ele será sublinhado, com um erro de

Nome de objeto inválido 'dbo.Room' ..

Perdi alguma coisa na organização das mesas?

UPDATE: Tentei atualizar a lista de tabelas (várias vezes)


11
Resposta que funciona: [DatabaseName].[Schema].[TableName] SO: Nome de objeto inválido sql
Ivan Chau

Respostas:


703

Tentar:

Edit-> IntelliSense->Refresh Local Cache

Isso deve atualizar os dados armazenados em cache pelo Intellisense para fornecer suporte de digitação antecipada e detecção de erros de pré-execução.

NOTA: O cursor deve estar no editor de consultas para que o menu IntelliSense fique visível.


8
O Intellisense / SSMS se atualiza periodicamente? Ou isso deve sempre ser um processo manual? (Eu tenho o meu palpite baseado em SSMS em 2005, mas sempre se pode esperar.)
Philip Kelley

37
inacreditável que em 2012 você precise fazer isso. Eles não podiam atualizar o Intellisense a cada poucos segundos automaticamente?
Matthew Lock

6
Isso pode exigir acesso ao banco de dados e puxar as definições de tabela / exibição a cada poucos segundos.
Jinglesthula

8
NOTA: O cursor deve estar no editor de consultas para que o menu IntelliSense fique visível.
bradlis7

5
@jinglesthula: Isso me salvaria de bater no servidor de banco de dados!
Paul

80

Ctrl+ Shift+ Ratualiza o intellisense no Management Studio 2008 também.


Eu não tenho esse recurso ... quando eu pressione Ctrl + Shift + R nada muda
Ibrahim Amer

4
@IbrahimAmer Seu cursor deve estar em um editor de consultas para que a opção de menu Intellisense esteja disponível. Se a opção de menu intellisense não estiver disponível, o atalho não fará nada.
Rachael

Também funciona para T-SQL no SQL Server Management Studio 2014
Vahid Amiri

44

Verifique se o banco de dados selecionado é aquele em que a tabela está. Eu estava executando o script Master. No meu caso, tive que mudar para hr_db.

insira a descrição da imagem aqui

Erro de novato, mas poderia ajudar alguém.


4
Não tenho certeza se é um erro de novato para ser honesto, pois sempre que você reconecta o servidor, por algum motivo, muda para "mestre" sem motivo óbvio. :)
Chris Rae

Se esse fosse o caso e a consulta não qualificasse completamente os nomes das tabelas, o código não seria executado. Acredito que o OP estava descrevendo a detecção de erros positivos falsos quando o problema que você descreveu não foi um fator contribuinte. (Certamente, eu já tinha descartou a possibilidade, quando fui pesquisar e acabou aqui.)
Dodecaphone

Exatamente o meu problema. Não há indicação do SMS de que ele tenha alterado o contexto do banco de dados ou qualquer outra pista.
Daniel Black

11
@ ChrisRae: Isso masterocorre porque é definido como o banco de dados padrão para o seu login de usuário. Apenas altere isso usando sp_defaultdbpara outro banco de dados para que o outro banco de dados seja selecionado no SSMS quando você efetuar login. (Também pode ser definido no SSMS por Security > Logins > your user login > Properties > Default database)
AxD

36

Depois de criar um novo objeto do SQL Server, o objeto recém-criado não é atualizado no cache local do IntelliSence e, por isso, mostra uma linha vermelha embaixo desse objeto. Então, você só precisa atualizar o cache local do SSMS IntelliSence e, depois de atualizá-lo,IntelliSence adicionará automaticamente o objeto recém-criado ao cache e a linha vermelha desaparecerá. tente isso

Edit -> IntelliSense -> Refresh Local Cache ou Ctrl+ Shift+R

insira a descrição da imagem aqui


11
Eu não tenho esse recurso ... quando eu pressione Ctrl + Shift + R nada muda
Ibrahim Amer

4
@IbrahimAmer Seu cursor deve estar em um editor de consultas para que a opção de menu Intellisense esteja disponível. Se a opção de menu intellisense não estiver disponível, o atalho não fará nada.
Rachael

18

No meu caso, o cache do IntelliSense estava listando informações de objetos para um banco de dados totalmente diferente. Se eu clicar no botão "Nova consulta" no SSMS, ele abriria uma consulta no meu catálogo padrão no servidor e esse editor de consultas sempre usaria apenas esse banco de dados. A atualização do cache não mudou nada. Reiniciar o SSMS não mudou nada. Alterar o banco de dados não mudou nada.

Acabei criando uma consulta clicando com o botão direito do mouse no banco de dados que realmente queria usar e escolhendo "Nova Consulta" nesse menu de contexto. Agora o SSMS usa os objetos corretos para o IntelliSense.


3
Este foi o meu caso também. Obrigado por compartilhar.
Behrooz Karjoo

11
USO datbaseName GO antes consulta também trabalha na criação do contexto
Behrooz Karjoo

@BehroozKarjoo Sim, eu tentei isso. Nem sempre parece funcionar. Se eu pudesse reproduzi-lo, colocaria no Microsoft Connect ou algo assim. Tenho certeza de que eles o marcariam como WONTFIX ou algo igualmente irritante, mas eu denunciaria.
Bacon Bits

Trabalhou perfeito! Obrigado! :)
Sean Stayns

Reinicie o SSMS e clique com o botão direito do mouse em nova consulta que funcionou para mim.
Hitsa 21/08/19

10

Você tem certeza de que a tabela em questão existe?

Você atualizou a exibição da tabela no Pesquisador de Objetos? Isso pode ser feito clicando com o botão direito do mouse na pasta "tabelas" e pressionando a F5tecla

Você também pode precisar atualizar novamente o cache do Intellisense.

Isso pode ser feito seguindo a rota do menu: Editar -> IntelliSense -> Atualizar cache local


7

A solução é:

  • Clique no menu Consulta,
  • depois clique em 'Alterar banco de dados'.
  • Selecione o nome do banco de dados apropriado.

É isso aí.


6

Mesmo problema comigo quando usei esse problema de sintaxe resolvido.

Sintaxe:

Use [YourDatabaseName]
Your Query Here

4

Mesmo após a instalação do SP3 no SQL Server 2008 Enterprise, esse ainda é um "problema". Ctrl+ Shift+ Rcomo todo mundo está dizendo resolveu esse problema para mim.


Eu não tenho esse recurso ... quando eu pressione Ctrl + Shift + R nada muda
Ibrahim Amer

@IbrahimAmer Seu cursor deve estar em um editor de consultas para que a opção de menu Intellisense esteja disponível. Se a opção de menu intellisense não estiver disponível, o atalho não fará nada.
Rachael #

3

Resolvido para o SSMS 2016.

Teve um problema semelhante, mas o Intellisense não estava no menu Editar.

O que parecia consertá-lo era ativar e desativar o Intellisens, clique com o botão direito do mouse no editor SQL e clique em 'Intellisense ativado'. Clique com o botão direito do mouse novamente em 'Intellisense ativado' para ativá-lo novamente. Ctr Q, eu também faço isso.

Isso resolveu o problema, e também sei obter o Intellisense no menu Editar.


2

Eu apenas tive que fechar o SMSS e reabri-lo. Tentei Atualizar o cache local e isso não funcionou.


1

você tentou: clique com o botão direito do mouse no banco de dados e clique em "atualizar"


Sim, eu tentei isso, tenho certeza de que está lá, posso adicionar registros e modificar etc. Apenas fiz um Select * no dbo.Room e, enquanto ainda tenho o sublinhado, ele produziu o conteúdo da tabela. Vou tentar uma reinicialização.
Richbits

1

Sei que essa pergunta já foi respondida, no entanto, tive uma solução diferente:

Se você estiver escrevendo um script no qual soltar as tabelas sem recriá-las, essas tabelas serão exibidas como ausentes se você tentar referenciá-las posteriormente.

Nota: Isso não vai acontecer com um script que é executado constantemente, mas às vezes é mais fácil ter um script com consultas para reerência do que digitá-las sempre.


0

Corri para o problema com: ODBC e SQL-Server-Authentication no ODBC e Firedac-Connection

Solução: tive que definir o Param MetaDefSchema como sqlserver nome de usuário: FDConnection1.Params.AddPair ('MetaDefSchema', self.FDConnection1.Params.UserName);

O wikidoc sais: MetaDefSchema = Nome do esquema padrão. O código de tempo do design >> exclui << !! o nome do esquema do objeto SQL-Server-Authenticatoinname se for igual a MetaDefSchema.

sem definir, o codificador automático cria: dbname.username.tablename -> nome de objeto inválido

Com a configuração de MetaDefSchema como sqlserver-username: dbname.tablename -> works!

Consulte também o embarcadero-doc em: http://docwiki.embarcadero.com/RADStudio/Rio/en/Connect_to_Microsoft_SQL_Server_(FireDAC)

Espero que isso ajude mais alguém..

Atenciosamente, Lutz


0

No azure data studio, pressione "cmd + shift + p" e digite "intellisense", e você verá uma opção para atualizar o cache intellisense.


0

Não esqueça de criar suas migrações depois de escrever os modelos

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.