Eu criei uma tabela testtable
dentro do banco de dados testbase
que tem a seguinte estrutura:
product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)
que usei o Microsoft SQL Server 2008 Management Studio.
Eu criei um procedimento armazenado da testtable_pricesmaller
seguinte maneira
use testbase
go
create procedure testtable_pricesmaller
@pricelimit money
as
select * from testtable where price = @pricelimit;
go
e podem exibir os procedimentos armazenados no Object Explorer
Microsoft SQL Server Management Studio. (Ele está listado na seguinte estrutura em árvore do Object Explorer
)
Databases
+ testbase
+ Tables
+ dbo.testtable
+ Programmability
+ Stored Procedures
+ dbo.testtable_pricesmaller
Acho muito estranho quando recebo o seguinte erro:
Could not find the stored procedure 'dbo.testtable_pricesmaller'.
quando executo a seguinte instrução SQL:
execute dbo.testtable_pricesmaller 50
O que poderia estar faltando?
USE
declaração, mas ela me deu o erro.Respostas:
O cache local de atualização do IntelliSense deve corrigi-lo
fonte
Não é necessário reiniciar o banco de dados após adicionar um novo procedimento armazenado, embora seja necessário atualizar o explorador de objetos para vê-lo lá.
Na próxima vez que você adicionar um procedimento armazenado, tente executar a opção de execução com o botão direito do mouse no explorador de objetos, insira seus parâmetros e veja se ele é executado. Se não funcionar, não tenho certeza qual é o seu problema. Se ele for executado, pode ser algo simples, como o SQL está tentando consultar no banco de dados errado.
fonte
Por fim, sei por que a mensagem aparece no MS SQL Server Management Studio.
O MS SQL Server Management Studio exige que você o reinicie após a criação de um procedimento armazenado.
Depois de reiniciar o MS SQL Server Management Studio, não existe mais esse erro.
(Estranho, isso significa que toda vez que eu crio um procedimento armazenado, tenho que reiniciá-lo?)
fonte
Seu comando create deve ser
você está ausente
dbo.
antes do nome do procedimento. Sempre que você cria um procedimento, é uma boa prática definir explicitamente o usuário / esquema com o nome de um procedimento, ou seja, o nome do procedimento deve ter assinaturas totalmente qualificadas.Eu espero que isso te ajude.
fonte
No SQL Server 2008, quando logado em uma conta do Windows, se você não tiver o nível de segurança SYSADMIN, ao criar um objeto sem especificar explicitamente o esquema, ele poderá / irá criá-lo sob o [DOMAIN \ nome de usuário]. [ObjectName ] em vez de [dbo]. [ObjectName] (acho que foi corrigido no SQL Server 2012).
Ocorreu um problema comigo quando reduzi o nível de segurança de um usuário, e um dos procedimentos que ele estava executando estava descartando e recriando tabelas sem um esquema; portanto, o restante do procedimento estava travando porque não conseguia acessar o objeto novamente. . Acontece que as tabelas foram criadas agora com o nome de usuário do domínio.
Aqui está a publicação da Microsoft sobre esse comportamento:
https://docs.microsoft.com/pt-br/sql/t-sql/statements/create-schema-transact-sql?view=sql-server-2017 (consulte a seção "Esquema implícito e criação de usuário")
A tabela não está sendo criada no esquema dbo
O SQL 2008 R2 cria usuário / esquema quando o usuário do Windows cria tabelas
Então, resumindo, você provavelmente tem um problema de banco de dados (você cria sua tabela em um banco de dados, mas tenta acessá-la de outro) ou tem o problema como eu acabei de descrever.
fonte
Eu sei que isso é velho; Me deparei com essa pergunta enquanto procurava uma solução para esse mesmo problema, e estou postando essa resposta na esperança de que ajude outras pessoas que também encontram essa pergunta.
No meu caso, recebi a mensagem de erro ao executar um relatório SSRS usando uma fonte de dados compartilhada. Essa fonte de dados compartilhada não especificou um banco de dados padrão (o Catálogo Padrão = parâmetro) e não foi possível adicioná-lo à cadeia de conexão porque não tenho a senha (e quando você altera algo em uma fonte de dados SSRS, ela tende a para que você digite novamente a senha).
Para resolver isso, alterei o banco de dados padrão para o logon na instância do SQL Server de mestre para o banco de dados que contém o procedimento armazenado que o relatório deseja executar.
Ao executar as coisas do SSMS, lembre-se de que o painel Pesquisador de Objetos é uma conexão, enquanto qualquer editor que você possui é uma conexão totalmente diferente. Portanto, você pode ver os objetos para SQL01 no Pesquisador de Objetos, mas o código que você está executando em um editor será executado em SQL02 - já deparei com esse problema algumas vezes ao longo dos anos e depois de muitas discussões e "Por que não funciona?" percebi meu erro. Para o editor, olhe no canto inferior direito para ver a qual instância e banco de dados você está conectado.
fonte
TL; DR: Você pode ter um procedimento armazenado que está chamando outro procedimento armazenado que não existe.
Eu tive esse problema e encontrei uma correção. Aqui está o que aconteceu. Eu criei um procedimento armazenado:
Criei outro procedimento armazenado que executou o primeiro
Algum tempo depois, mudei o nome
dbo.MyProc
paradbo.MyProc2
. Depois de renomeá-lo, quando tentava ligardbo.MyProcCaller
, recebia a seguinte mensagem de erro:Minha solução foi alterar meu segundo procedimento armazenado para usar o novo nome:
Aqui está uma maneira simples de verificar se você tem esse problema. Clique para modificar o texto do procedimento armazenado e, em seguida, execute esse texto. Se você receber um aviso como esse, precisará renomear seu procedimento armazenado:
fonte
Essa pergunta tem alguns anos, mas eu só quero colocar outra possibilidade para alguém como eu que a encontrou mais tarde.
Executei este comando: EXEC SP_CONFIGURE 'Agent XPs'
E obteve o erro descrito: Mensagem 2812, nível 16, estado 62, linha 1 Não foi possível encontrar o procedimento armazenado 'SP_CONFIGURE'.
Mas lembrei que este servidor está configurado para fazer distinção entre maiúsculas e minúsculas. Portanto, este comando funcionou bem: EXEC sp_configure 'Agent XPs'
HTH
fonte