Как отбросить все хранимые процедуры сразу в базе данных SQL Server?

В настоящее время мы используем отдельный отбрасывание операторы для каждой хранимой процедуры в файле сценария:

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

Существует ли способ отбросить их внезапно, или возможно в цикле?

60
задан marc_s 10 April 2010 в 06:33
поделиться

2 ответа

Что-то вроде (найдено в Удалить все процедуры из базы данных с помощью хранимой процедуры в SQL Server).

Просто так, к слову, это кажется ОЧЕНЬ опасным занятием, просто мысль...

declare @procName varchar(500)
declare cur cursor 

for select [name] from sys.objects where type = 'p'
open cur
fetch next from cur into @procName
while @@fetch_status = 0
begin
    exec('drop procedure [' + @procName + ']')
    fetch next from cur into @procName
end
close cur
deallocate cur
103
ответ дан 24 November 2019 в 17:26
поделиться

Я бы предпочел сделать это следующим образом:

  • сначала сгенерируйте список хранимых процедур для сбросьте, проверив представление системного каталога:

     SELECT 'DROP PROCEDURE [' + SCHEMA_NAME (p.schema_id) + ']. [' + p.NAME + '];' 
    FROM sys.procedures p { {1}} 

    При этом создается список операторов DROP PROCEDURE в окне вывода SSMS.

  • скопируйте этот список в новое окно запроса и, возможно, адаптируйте / измените его, а затем выполните.

Отсутствие беспорядочных и медленных курсоров, дает вам возможность проверить и перепроверить список процедур, которые нужно отбросить, прежде чем вы на самом деле его бросаете

123
ответ дан 24 November 2019 в 17:26
поделиться