Tengo un grupo de procedimientos almacenados con nombres como 'somename_%'. ¿Hay alguna manera de eliminar esa SP con una consulta, porejemploSoltar grupo de procedimientos almacenados por nombre
DROP PROCEDURE donde nombre como 'somename_%'
.
Tengo un grupo de procedimientos almacenados con nombres como 'somename_%'. ¿Hay alguna manera de eliminar esa SP con una consulta, porejemploSoltar grupo de procedimientos almacenados por nombre
DROP PROCEDURE donde nombre como 'somename_%'
.
Esto funciona para MSSQL 2005 +
DECLARE @DropScript varchar(max)
set @DropScript = ''
SELECT @DropScript = @DropScript + 'DROP PROCEDURE [' + schema_name(schema_id)+ '].' + '[' + name + ']
' FROM sys.procedures
where name like 'somename_%'
exec (@DropScript)
Funciona muy bien! – Kate
cosas buenas. Tal vez sería un poco mejor usar la función QUOTENAME en lugar de concatenar, ¡pero me alegro de que funcione! –
La manera en que siempre tienden a hacer este tipo de cosas se acaba de extraer los procedimientos de la lista de las tablas del sistema usando mi critierion y luego crear la lista de comandos - ya sea directa en sql, por ejemplo SELECT 'DROP PROCEDURE ' + procName FROM system_procedures_table WHERE procName like...
o en Excel.
Puede generar el DDL consultando el diccionario de datos. Por ejemplo, en Oracle:
SELECT 'DROP PROCEDURE "'||owner||'"."'||object_name||'";'
FROM all_procedures
WHERE procedure_name IS NULL
AND lower(object_name) LIKE 'somename_%';
Gracias, pero uso MS SQL – Kate
Lo siento, debería haberlo sabido. –
En MS_Sql-servidor cn crear una declaración con todos los procedimientos pertinentes para caer a través de (ab) utilizando el "para la ruta XML ('')" cláusula ...
BEGIN TRANSACTION;
GO
CREATE PROC Test_1 AS
BEGIN;
PRINT '1'
END;
GO
CREATE PROC Test_2 AS
BEGIN;
PRINT '2'
END;
GO
SELECT * FROM sys.objects WHERE name LIKE 'Test%' AND TYPE = 'P';
DECLARE @Stmt NVARCHAR(MAX);
SET @Stmt = (SELECT 'DROP PROC ' + STUFF (x.Stmt, 1, 2, SPACE(0))
FROM (SELECT ', ' + SCHEMA_NAME(Obj.Schema_ID) + CHAR(46) + Obj.Name
FROM sys.objects AS Obj
WHERE Obj.name LIKE 'Test%'
AND obj.TYPE = 'P'
FOR XML PATH ('')
) AS X (Stmt)
);
SELECT @Stmt;
EXEC sp_ExecuteSQL @Stmt;
SELECT * FROM sys.objects WHERE name LIKE 'Test%' AND TYPE = 'P';
ROLLBACK;
Tenga en cuenta que [las respuestas solo de enlace] (http://meta.stackoverflow.com/tags/link-only-answers/info) no se recomiendan, las respuestas SO deberían ser el punto final de una búsqueda de una solución (vs. otra escala más de referencias, que tienden a quedar obsoletas en el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia. – kleopatra
¿qué base de datos estás utilizando? – hallie