Preciso descobrir se existe uma função em um banco de dados, para que eu possa descartá-la e criá-la novamente. Basicamente, deve ser algo como o seguinte código que eu uso para procedimentos armazenados:
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'[dbo].[SP_TEST]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
sql
sql-server
sql-function
Dr. Greenthumb
fonte
fonte
Costumo usar o Information_Schema:
para funções e alteração
Routine_Type
para procedimentos armazenadosfonte
Por que não apenas:
O segundo argumento de
object_id
é opcional, mas pode ajudar a identificar o objeto correto. Existem vários valores possíveis para esse argumento de tipo, particularmente:fonte
CREATE TABLE YourFunctionName(X INT);
executando o código falhará.object_id('YourFunction', 'FN')
ou qualquer outro designador (segundo argumento) que deixe claro a que tipo de objeto você está se referindo.Eu descobri que você pode usar uma abordagem muito não detalhada e direta para verificar a existência de vários objetos do SQL Server desta maneira:
Isso se baseia na função OBJECTPROPERTY, disponível no SQL 2005+. O artigo do MSDN pode ser encontrado aqui .
A função OBJECTPROPERTY usa a seguinte assinatura:
Você passa um valor literal para o parâmetro de propriedade, designando o tipo de objeto que está procurando. Há uma lista enorme de valores que você pode fornecer.
fonte
Eu sei que este tópico é antigo, mas eu só queria adicionar esta resposta para aqueles que acreditam que é mais seguro do
Alter
queDrop
eCreate
. A seguir,Alter
oFunction
se existe ouCreate
se não existe:fonte
ALTER OR CREATE