В настоящее время мы используем отдельный отбрасывание операторы для каждой хранимой процедуры в файле сценария:
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]
Существует ли способ отбросить их внезапно, или возможно в цикле?
Что-то вроде (найдено в Удалить все процедуры из базы данных с помощью хранимой процедуры в 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
Я бы предпочел сделать это следующим образом:
сначала сгенерируйте список хранимых процедур для сбросьте, проверив представление системного каталога:
SELECT 'DROP PROCEDURE [' + SCHEMA_NAME (p.schema_id) + ']. [' + p.NAME + '];'
FROM sys.procedures p { {1}}
При этом создается список операторов DROP PROCEDURE
в окне вывода SSMS.
скопируйте этот список в новое окно запроса и, возможно, адаптируйте / измените его, а затем выполните.
Отсутствие беспорядочных и медленных курсоров, дает вам возможность проверить и перепроверить список процедур, которые нужно отбросить, прежде чем вы на самом деле его бросаете