Ao renomear uma procedure utilizando a procedure sp_rename talvez tenha encontrado um erro no SQL Server. Vejamos:
1) Vamo criar a procedure abaixo:
USE AdventureWorks2008R2
GO
CREATE PROCEDURE sp_Employee
AS
SELECT * FROM HumanResources.Employee
WHERE JobTitle LIKE '%i%'
ORDER BY 1
GO
2) Vamos renomear a procedure:
sp_rename 'sp_Employee', 'sp_OtherEmployee'
3) Vamos verificar o texto da nova procedure:
USE AdventureWorks2008R2
GO
sp_helptext sp_OtherEmployee
4) Observe o resultado e constate que o nome da procedure retornado ainda é o antigo.
CREATE PROCEDURE sp_Employee
AS
SELECT * FROM HumanResources.Employee
WHERE JobTitle LIKE '%i%'
ORDER BY 1
5) Observe que ao tentar visualizar o conteúdo da procedure usando o nome antigo ganhamos o erro abaixo:
The object 'sp_employee' does not exist in database 'AdventureWorks2008R2' or is invalid for this operation.
6) Agora execute a procedure com o novo nome!!!
Conclusão:
O problema está na procedure sp_helptext. Além disso, a situação acima também se dá em Views, Triggers e Functions etc.
Questão:
Se o nome da procedure que está no corpo da procedure não é atualizado, como o SQL Server executa a procedure correta?
Resposta:
O nome da procedure que estava no System Metadata foi atualizado, mas não foi atualizado na definição da procedure. Quando executamos uma stored procedure, o SQL Server encontra o ObjectID da stored procedure e recupera o corpo da procedure usando o ObjectID e executa o corpo da procedure. Por isso, ao executar a procedure não ocorreu qualquer erro.
Nenhum comentário:
Postar um comentário