В чем заключается задача группировки хранимых процедур в SQL Server?

Одна из самых сложных проблем, с которыми мне приходилось сталкиваться, связана с группами сохраненных процедур. Учитывая хранимую процедуру, usp_DoSomethingAwesome, я могу создать этот процесс в другой группе, вызвав его usp_DoSomethingAwesome;2.

Я обнаружил это при устранении некоторых проблем с репликацией (Publisher: SQL 2000 Ent., Dist /Sub: 2008 R2 Ent.), которые возникли с некоторыми системными хранимыми процедурами репликации Insert, Update и Delete.

Какова цель /мысль за эту способность «группировки»?

35 голосов | спросил swasheck 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 18 Sep 2012 22:51:56 +0400 2012, 22:51:56

2 ответа


32

Это похоже на перегрузку метода. По существу, вы могли бы создать две или более версии вашей хранимой процедуры, где каждый делает разные вещи - принимать разные значения параметров, работать с разными таблицами, иметь разные выходные данные и т. Д.

Они называются Нумерованные процедуры , и они абсолютно устарели ( с 2005 года ). Они по-прежнему поддерживаются в SQL Server 2012, но некоторые функции не очень хорошо сочетаются с ними. Например, они считаются нарушением сдерживания в Содержащихся Базах данных, и любая процедура, пронумерованная> 1 не будет создан:

  

Msg 12829, Уровень 16, Состояние 1, Пояснение процедуры, Строка 1   
Хранимая процедура «dbo.blat» относится к группе пронумерованных хранимых процедур. Нумерованные хранимые процедуры недоступны в содержащихся базах данных. Для получения дополнительной информации о содержащихся в базе данных сведениях см. В разделе «Книги в Интернете» «Понимание хранимых баз данных».

ответил Aaron Bertrand 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 18 Sep 2012 22:53:59 +0400 2012, 22:53:59
4

Возможность (устаревшая) для группировки хранимых процедур, по-видимому, существует для одной (и довольно глупой) цели: возможность массового удаления с помощью одного оператора DROP. В соответствии с документацией MSDN SQL Server 2000 для создания сохраненной Процедура :

  

Группировка
  Процедуру можно создать с тем же именем, что и существующая хранимая процедура, если ей присваивается другой идентификационный номер, который позволяет логически группировать процедуры. Процедуры группировки с тем же именем позволяют одновременно удалять их. Процедуры, используемые в одном приложении, часто группируются таким образом. Например, процедуры, используемые с приложением my_app , могут быть названы my_proc; 1, my_proc; 2 и т. Д. Удаление my_proc удаляет всю группу. После того, как процедуры сгруппированы, отдельные процедуры внутри группы не могут быть удалены.

Нет никаких дополнительных преимуществ для использования этой конструкции, учитывая, что использование одного и того же базового имени даже не допускает перегрузки (подписи не обязательно должны быть уникальными и не выполнять автоматическую маршрутизацию выполнения для определенного «числа»), и поэтому вы по-прежнему необходимо использовать «число» при выполнении. Следовательно, определение «глупо» (и это, вероятно, слишком хорошо относится к нему;).

ответил Solomon Rutzky 2 PMpSat, 02 Apr 2016 23:38:57 +030038Saturday 2016, 23:38:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132