[英]Drop group of stored procedures by name
我有一組名為'somename_%'的存儲過程。 有沒有辦法用一個查詢刪除該SP,例如
DROP PROCEDURE的名稱如'somename_%'
。
這適用於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)
您可以通過查詢數據字典來生成DDL。 例如,在Oracle中:
SELECT 'DROP PROCEDURE "'||owner||'"."'||object_name||'";'
FROM all_procedures
WHERE procedure_name IS NULL
AND lower(object_name) LIKE 'somename_%';
我總是傾向於做這些事情的方式只是使用我的批處理從系統表中提取列表過程然后創建命令列表 - 直接在sql中例如SELECT 'DROP PROCEDURE ' + procName FROM system_procedures_table WHERE procName like...
或在Excel中。
在MS_Sql-Server中,您可以使用“FOR XML PATH('')”子句創建一個包含所有相關過程的語句(ab)。
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.