删除特定SQL Server架构中的所有存储过程

dg9*_*g90 7 t-sql sql-server stored-procedures

我有数百个由DataSync自动生成的程序.

我没有时间和感觉手动删除它们.

他们都从一开始 DataSync.

有没有办法删除名称以DataSync.?开头的所有存储过程?

Jon*_*ton 22

使用information_schema.routines(它在诸如MSSQL,Mysql之类的RDBMS中是相当标准的):

如果你的proc名称开始"DataSync".然后他们可能在一个模式中,所以你可以找到它们:

select
    'DROP PROCEDURE [' + routine_schema + '].[' + routine_name + ']'
from 
    information_schema.routines where routine_schema = 'DataSync' and routine_type = 'PROCEDURE'
Run Code Online (Sandbox Code Playgroud)

如果你的proc名称开始"DataSync",你可以找到它们:

select
    'DROP PROCEDURE [' + routine_schema + '].[' + routine_name + ']'
from 
    information_schema.routines where routine_name like 'DataSync%' and routine_type = 'PROCEDURE'
Run Code Online (Sandbox Code Playgroud)

如果要执行所有这些drop语句,可以使用FOR XML PATH构建单个执行,如下所示:

declare @sql varchar(max)

set @sql = (
select
    'DROP PROCEDURE [' + routine_schema + '].[' + routine_name + '] ' 
from 
    information_schema.routines where routine_schema = 'DataSync' and routine_type = 'PROCEDURE'
FOR XML PATH ('')
)

exec (@sql)
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 5

假设您在指定"SQL"时表示SQL Server - 那么最简单的方法是:运行此查询:

SELECT 
    name, 
    DropCmd = 'DROP PROCEDURE DataSync.' + name 
FROM sys.procedures
WHERE 
     schema_id = SCHEMA_ID('DataSync')
Run Code Online (Sandbox Code Playgroud)

甚至"懒惰"版本将使用光标自动为您执行此操作:

DECLARE DropSpCursor CURSOR FAST_FORWARD FOR
    SELECT 
        name
    FROM sys.procedures
    WHERE schema_id = SCHEMA_ID('DataSync')

DECLARE @StoredProcName sysname
DECLARE @DropStatement NVARCHAR(1000)

OPEN DropSpCursor

FETCH NEXT FROM DropSpCursor INTO @StoredProcName, @SchemaName

WHILE (@@fetch_status <> -1)
BEGIN
    IF (@@fetch_status <> -2)
    BEGIN
        SET @DropStatement = N'DROP PROCEDURE DataSync.' + @StoredProcName
        EXEC(@DropStatement)
    END

    FETCH NEXT FROM DropSpCursor INTO @StoredProcName
END

CLOSE DropSpCursor 
DEALLOCATE DropSpCursor 
Run Code Online (Sandbox Code Playgroud)

  • 我想知道"." 他说,在名字的最后.也许他们都在一个架构中. (4认同)
  • 我喜欢使用STUFF,ForXML并制作所有drop的单个可执行语句(只是为了好玩!) (2认同)