vista verificar una tabla saber procedimientos procedimiento objeto nombre los hay guardan funcion existe donde datos con comprobar borrar almacenados almacenado sql sql-server-2005 stored-procedures

saber - verificar si existe una tabla en sql server



Cómo detectar si ya existe un procedimiento almacenado (10)

Tengo que escribir un script de despliegue que funcionará si existe un procedimiento almacenado o no existe. es decir, si existe, entonces necesito modificarlo, de lo contrario, crearlo.

¿Cómo puedo hacer esto en sql.

Estoy usando SQL Server 2005



Desde SQL Server 2016 CTP3 puede usar nuevas sentencias DIE en lugar de grandes contenedores IF

Sintaxis:

DROP {PROC | PROCEDIMIENTO} [SI EXISTE] {[nombre_esquema. ] procedimiento} [, ... n]

Consulta:

DROP PROCEDURE IF EXISTS usp_name

Más información here


EDITAR: no poner texto antes de bloques de código lo mata ... siempre lo olvides :)

if not exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[xxx]'') and OBJECTPROPERTY(id, N''IsProcedure'') = 1) BEGIN CREATE PROCEDURE dbo.xxx

donde xxx es el nombre del proceso


El siguiente código verificará si el procedimiento almacenado ya existe o no.

Si existe, se alterará; si no existe, creará un nuevo procedimiento almacenado para usted:

//syntax for Create and Alter Proc DECLARE @Create NVARCHAR(200) = ''Create PROCEDURE sp_cp_test''; DECLARE @Alter NVARCHAR(200) =''Alter PROCEDURE sp_cp_test''; //Actual Procedure DECLARE @Proc NVARCHAR(200)= '' AS BEGIN select ''''sh'''' END''; //Checking For Sp IF EXISTS (SELECT * FROM sysobjects WHERE id = Object_id(''[dbo].[sp_cp_test]'') AND Objectproperty(id, ''IsProcedure'') = 1 AND xtype = ''p'' AND NAME = ''sp_cp_test'') BEGIN SET @Proc=@Alter + @Proc EXEC (@proc) END ELSE BEGIN SET @Proc=@Create + @Proc EXEC (@proc) END go


Estoy de acuerdo con Luke, pero una mejor opción podría ser utilizar una herramienta como Red-Gate SQL Compare o SQL Examiner para comparar automáticamente las diferencias y generar un script de migración.


La forma más limpia es probar su existencia, soltarla si existe y luego volver a crearla. No puede incrustar una instrucción "create proc" dentro de una instrucción IF. Esto debería hacer muy bien:

IF OBJECT_ID(''MySproc'', ''P'') IS NOT NULL DROP PROC MySproc GO CREATE PROC MySproc AS BEGIN ... END


Si ABANDONE y CREE el procedimiento, perderá la configuración de seguridad. Esto podría molestar a su DBA o romper su aplicación por completo.

Lo que hago es crear un procedimiento almacenado trivial si aún no existe. Después de eso, puede ALTERAR el procedimiento almacenado a su gusto.

IF object_id(''YourSp'') IS NULL EXEC (''create procedure dbo.YourSp as select 1'') GO ALTER PROCEDURE dbo.YourSp AS ...

De esta manera, la configuración de seguridad, los comentarios y otros metadependientes sobrevivirán a la implementación.


Si solo está tratando con procedimientos almacenados, lo más fácil es probablemente dejar caer el proceso y luego volver a crearlo. Puede generar todo el código para hacer esto usando el asistente Generar secuencias de comandos en SQL Server.

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[YourSproc]'') AND type in (N''P'', N''PC'')) DROP PROCEDURE [dbo].[YourSproc] CREATE PROCEDURE YourSproc...


Tengo un proceso almacenado que permite al cliente extender la validación; si existe, no quiero cambiarla, si no es así, quiero crearla, de la mejor manera que he encontrado:

IF OBJECT_ID(''ValidateRequestPost'') IS NULL BEGIN EXEC (''CREATE PROCEDURE ValidateRequestPost @RequestNo VARCHAR(30), @ErrorStates VARCHAR(255) OUTPUT AS BEGIN SELECT @ErrorStates = @ErrorStates END'') END


IF OBJECT_ID(''SPNAME'') IS NULL -- Does Not Exists ELSE -- Exists