W SQL Server, jaki jest cel grupowania procedur przechowywanych?


35

Jeden z najbardziej kłopotliwych problemów, z którymi miałem do czynienia, dotyczy grup procedur składowanych. Biorąc pod uwagę procedurę składowaną usp_DoSomethingAwesome, mogę utworzyć ten proces w innej grupie, wywołując go usp_DoSomethingAwesome;2.

Odkryłem to podczas rozwiązywania problemów z niektórymi problemami z replikacją (Wydawca: SQL 2000 Ent., Dist / Sub: 2008 R2 Ent.), Które pojawiły się wraz z niektórymi wygenerowanymi przez system procedurami przechowywanymi replikacji Wstaw, Aktualizuj i Usuń.

Jaki jest cel / myśl posiadania tej umiejętności „grupowania”?

Odpowiedzi:


32

To jest jak przeciążanie metody. Zasadniczo można utworzyć dwie lub więcej wersji procedury składowanej, w których każda robi różne rzeczy - przyjmuje inną liczbę parametrów, działa na różnych tabelach, ma inne dane wyjściowe itp.

Nazywa się je Procedurami Numerowanymi i są absolutnie przestarzałe ( ogłoszone od 2005 r .). Nadal są obsługiwane w SQL Server 2012, ale niektóre funkcje nie działają z nimi dobrze. Na przykład są one uważane za naruszenie zabezpieczeń w Zawartych bazach danych, a żadna procedura o numerze> 1 nie zostanie utworzona:

Msg 12829, poziom 16, stan 1, procedura blat, wiersz 1
Procedura składowana „dbo.blat” odnosi się do grupy ponumerowanych procedur przechowywanych. Numerowane procedury składowane nie są dostępne w zawartych bazach danych. Więcej informacji na temat zawartych baz danych można znaleźć w temacie Books Online Zrozumienie zawartych baz danych.


5

Wydaje się, że istnieje możliwość (przestarzałe) grupowania Procedur składowanych w jednym (i raczej niemądrym) celu: możliwość masowego usuwania za pomocą pojedynczej DROPinstrukcji. Zgodnie z dokumentacją MSDN programu SQL Server 2000 dotyczącą tworzenia procedury składowanej :

Grupowanie
Procedurę można utworzyć o tej samej nazwie, co istniejącą procedurę przechowywaną, jeśli otrzyma inny numer identyfikacyjny, co pozwala na logiczne grupowanie procedur. Procedury grupowania o tej samej nazwie pozwalają na ich jednoczesne usunięcie. Procedury stosowane w tej samej aplikacji są często grupowane w ten sposób. Na przykład procedury stosowane w aplikacji my_app mogą nazywać się my_proc; 1, my_proc; 2 itd. Usunięcie my_proc powoduje usunięcie całej grupy. Po zgrupowaniu procedur nie można usunąć pojedynczych procedur w grupie.

Korzystanie z tej konstrukcji nie wiąże się z żadnymi dodatkowymi korzyściami, biorąc pod uwagę, że użycie tej samej nazwy podstawowej nie pozwala nawet na przeciążenie (podpisy nie muszą być unikalne i nie są automatycznie kierowane do konkretnego numeru), dlatego nadal trzeba podczas wykonywania użyj „numeru”. Stąd determinacja „głupka” (i to chyba zbyt miło z tego powodu ;-).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.