Necesito averiguar si existe una función en una base de datos, para poder soltarla y volver a crearla. Básicamente debería ser algo como el siguiente código que utilizo para los procedimientos almacenados:
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
fuente
fuente
Tiendo a usar el Information_Schema:
para funciones y cambio
Routine_Type
para procedimientos almacenadosfuente
¿Por qué no solo:
El segundo argumento de
object_id
es opcional, pero puede ayudar a identificar el objeto correcto. Existen numerosos valores posibles para este tipo de argumento, particularmente:fuente
CREATE TABLE YourFunctionName(X INT);
ejecutar el código fallará.object_id('YourFunction', 'FN')
o cualquier otro designador (segundo argumento) que deje en claro a qué tipo de objeto se refiere.Descubrí que puede usar un enfoque muy detallado y directo para verificar la existencia de varios objetos de SQL Server de esta manera:
Esto se basa en la función OBJECTPROPERTY que está disponible en SQL 2005+. El artículo de MSDN se puede encontrar aquí .
La función OBJECTPROPERTY utiliza la siguiente firma:
Usted pasa un valor literal al parámetro de propiedad, designando el tipo de objeto que está buscando. Hay una lista masiva de valores que puede proporcionar.
fuente
Sé que este hilo es antiguo, pero solo quería agregar esta respuesta para aquellos que creen que es más seguro
Alter
queDrop
yCreate
. El siguiente seráAlter
elFunction
si existe oCreate
no:fuente
ALTER OR CREATE