verificar validar usuario saber registro inserto hacer existe este ejecutar datos con comprobar como antes sql sql-server sql-function

sql - usuario - validar si un registro existe en la base de datos



Cómo verificar si una función existe en una base de datos SQL (5)

¿Por qué no solo?

IF object_id(''YourFunctionName'') IS NOT NULL BEGIN DROP FUNCTION [dbo].[YourFunctionName] END GO

Al menos esto funciona para mí ...

Necesito averiguar si existe una función en una base de datos, para poder descartarla y volver a crearla. Básicamente debe ser algo así 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 )


Descubrí que puede usar un enfoque muy simple y directo para verificar la existencia de varios objetos de SQL Server de esta manera:

IF OBJECTPROPERTY (object_id(''schemaname.scalarfuncname''), ''IsScalarFunction'') = 1 IF OBJECTPROPERTY (object_id(''schemaname.tablefuncname''), ''IsTableFunction'') = 1 IF OBJECTPROPERTY (object_id(''schemaname.procname''), ''IsProcedure'') = 1

Esto se basa en la función OBJECTPROPERTY que está disponible en SQL 2005+. El artículo de MSDN se puede encontrar here .

La función OBJECTPROPERTY usa la siguiente firma:

OBJECTPROPERTY ( id , property )

Usted pasa un valor literal en el parámetro de propiedad, designando el tipo de objeto que está buscando. Hay una lista masiva de valores que puedes suministrar.


Esto es lo que usa SSMS cuando se crea una secuencia de comandos usando la opción DROP and CREATE

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[foo]'') AND type IN ( N''FN'', N''IF'', N''TF'', N''FS'', N''FT'' )) DROP FUNCTION [dbo].[foo] GO

Este enfoque para implementar cambios significa que necesita volver a crear todos los permisos en el objeto para que pueda considerar ALTER -ing si existe en su lugar.


Sé que este hilo es viejo, pero solo quería agregar esta respuesta para aquellos que creen que es más seguro Alter que Drop y Create . Lo siguiente Alter la Function si existe o la creará si no:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[foo]'') AND type IN ( N''FN'', N''IF'', N''TF'', N''FS'', N''FT'' )) EXEC(''CREATE FUNCTION [dbo].[foo]() RETURNS INT AS BEGIN RETURN 0 END'') GO ALTER PROCEDURE [dbo].[foo] AS ...


Tiendo a usar el Information_Schema:

IF EXISTS ( SELECT 1 FROM Information_schema.Routines WHERE Specific_schema = ''dbo'' AND specific_name = ''Foo'' AND Routine_Type = ''FUNCTION'' )

para funciones y cambie Routine_Type para procedimientos almacenados

IF EXISTS ( SELECT 1 FROM Information_schema.Routines WHERE Specific_schema = ''dbo'' AND specific_name = ''Foo'' AND Routine_Type = ''PROCEDURE'' )