У SQL Server, яка мета групування збережених процедур?


35

Одне з найбільш дивовижних питань, з яким мені довелося зіткнутися, пов’язане з групами збережених процедур. З огляду на збережену процедуру, usp_DoSomethingAwesomeя можу створити цю програму в іншій групі, викликавши її usp_DoSomethingAwesome;2.

Я виявив це під час вирішення деяких проблем реплікації (Publisher: SQL 2000 Ent., Dist / Sub: 2008 R2 Ent.), Які виникли з деякими системними методами Insert, Update та Delete реплікації, що зберігаються.

Яка мета / думка, що стоїть перед цією здатністю "групувати"?

Відповіді:


32

Це як перевантаження методу. По суті, ви можете створити дві або більше версій вашої збереженої процедури, де кожна робить різні речі - приймає різну кількість параметрів, працює над різними таблицями, має різний вихід тощо.

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

Msg 12829, рівень 16, стан 1, процедурний блат, рядок 1
Збережена процедура 'dbo.blat' відноситься до групи пронумерованих збережених процедур. Пронумеровані збережені процедури недоступні у вміщених базах даних. Будь ласка, зверніться до теми "Книги онлайн" Розуміння вміщених баз даних для отримання додаткової інформації про вміщені бази даних.


5

Здатність (застаріла) групувати збережені процедури, здається, існує для однієї (і досить нерозумної) мети: можливість масового видалення за допомогою одного DROPоператора. Відповідно до документації MSDN для SQL Server 2000 для створення збереженої процедури :

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

Немає додаткових переваг для використання цієї конструкції, враховуючи, що використання одного і того ж базового імені навіть не дозволяє перевантажувати (підписи не повинні бути унікальними, а також автоматичне виконання маршрутизації до певного "числа"), і тому вам все одно потрібно використовувати "число" під час виконання. Звідси визначення "дурного" (і це, мабуть, занадто приємно з цього приводу ;-).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.