Eu estava passando por um de nossos bancos de dados para responder a uma pergunta do chefe e espiei um procedimento armazenado. Como de costume, cliquei com o botão direito do mouse no SSMS, cliquei em Script stored procedure as... then create e, para minha surpresa, tudo o que encontrei foi a instrução CREATE PROCEDURE:
Para verificar novamente, pedi a outra pessoa que olhasse e eles obtiveram a mesma coisa. Eles estavam conectados como proprietário do banco de dados, eu estava conectado como sysadmin. eu corri em seguida
select
m.definition
from sys.procedures p
left join sys.sql_modules m on p.object_id=m.object_id
where p.name in ('spPUpdateContactUserLockout', 'spPLINK_SYNC_CONTACT');
e consegui isso (observe que incluí outro proc armazenado para fins de comparação)
Eu não vi isso antes. Sempre. Eu não achava que alguém poderia criar um procedimento armazenado sem definir um corpo, e existem vários desses procedimentos em vários bancos de dados nesta instância. Neste ponto estou preocupado, mas não tenho certeza se não preciso estar ou se deveria estar mais preocupado do que estou atualmente.
Esta instância é o SQL Server 2017 Standard x64 RTM-CU11 e estou usando o SSMS 17.9. Qualquer insight é apreciado!
Sim, isso é possível, sem necessidade de corpo. Como ficou assim? Seu palpite é tão bom quanto o nosso. É fácil de fazer, mas não podemos saber se isso foi um erro humano ou algum tipo de truncamento de um script ou ferramenta.
Resultado:
É bom ter controle de origem para resolver esse tipo de coisa.
No entanto, se você estiver preocupado, verifique seu aplicativo e o restante dos procedimentos para ver se algo chama esse procedimento vazio e realmente espera que ele faça alguma coisa. Tratamento de erros, testes de unidade, etc. podem estar passando simplesmente porque não está gerando um erro.