Удалить группу хранимых процедур по имени - PullRequest
9 голосов
/ 15 марта 2010

У меня есть группа хранимых процедур с такими именами, как 'somename_%'. Есть ли способ удалить этот SP одним запросом, например

ПРОЦЕДУРА КАПЛИ, где имя нравится 'SomeName _%'

.

Ответы [ 5 ]

12 голосов
/ 15 марта 2010

Это работает для 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)
2 голосов
/ 15 марта 2010

Вы можете сгенерировать DDL, запросив словарь данных. Например, в Oracle:

SELECT 'DROP PROCEDURE "'||owner||'"."'||object_name||'";'
FROM all_procedures
WHERE procedure_name IS NULL
AND lower(object_name) LIKE 'somename_%';
0 голосов
/ 15 марта 2010

В MS_Sql-Server вы можете создать Оператор со всеми соответствующими Процедурами, чтобы пройти через (ab), используя предложение FOR FOR PATH ('') "...

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;
0 голосов
/ 15 марта 2010

Я всегда склонен делать подобные вещи, просто извлекая процедуры списка из системных таблиц, используя мой критерий, а затем создавая список команд - либо непосредственно в sql, например. SELECT 'DROP PROCEDURE ' + procName FROM system_procedures_table WHERE procName like... или в Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...