Wozu werden in SQL Server gespeicherte Prozeduren gruppiert?

35

Eines der verwirrendsten Probleme, mit denen ich zu tun hatte, hat mit Gruppen gespeicherter Prozeduren zu tun. Bei einer gespeicherten Prozedur kann usp_DoSomethingAwesomeich diesen Proc in einer anderen Gruppe erstellen, indem ich ihn aufrufe usp_DoSomethingAwesome;2.

Ich habe dies bei der Behebung einiger Replikationsprobleme (Publisher: SQL 2000 Ent., Dist / Sub: 2008 R2 Ent.) Festgestellt, die bei einigen der vom System generierten gespeicherten Prozeduren zum Einfügen, Aktualisieren und Löschen von Replikationen aufgetreten sind.

Was ist der Zweck / Gedanke hinter dieser "Gruppierungs" -Fähigkeit?

Swasheck
quelle

Antworten:

32

Dies ist wie das Überladen einer Methode. Im Wesentlichen könnten Sie zwei oder mehr Versionen Ihrer gespeicherten Prozedur erstellen, in denen jede unterschiedliche Aufgaben ausführt - eine unterschiedliche Anzahl von Parametern verwenden, unterschiedliche Tabellen bearbeiten, unterschiedliche Ausgaben haben usw.

Sie werden nummerierte Verfahren genannt und sind absolut veraltet ( angekündigt seit 2005 ). Sie werden in SQL Server 2012 weiterhin unterstützt, einige Funktionen können jedoch nicht mit ihnen verwendet werden. Beispielsweise werden sie als Sicherheitsverletzung in enthaltenen Datenbanken betrachtet, und es werden keine Prozeduren mit der Nummer> 1 erstellt:

Meldung 12829, Ebene 16, Status 1, Prozedur blat, Zeile 1
Die gespeicherte Prozedur 'dbo.blat' bezieht sich auf eine Gruppe von nummerierten gespeicherten Prozeduren. Nummerierte gespeicherte Prozeduren sind in enthaltenen Datenbanken nicht verfügbar. Weitere Informationen zu enthaltenen Datenbanken finden Sie in der Onlinedokumentation unter Grundlegendes zu enthaltenen Datenbanken.

Aaron Bertrand
quelle
5

Die Fähigkeit (veraltet), gespeicherte Prozeduren zu gruppieren, scheint für einen einzigen (und ziemlich albernen) Zweck zu existieren: die Fähigkeit, Massenlöschungen über eine einzelne DROPAnweisung durchzuführen. Gemäß der MSDN-Dokumentation zu SQL Server 2000 zum Erstellen einer gespeicherten Prozedur :

Gruppierung
Eine Prozedur kann mit demselben Namen wie eine vorhandene gespeicherte Prozedur erstellt werden, wenn sie eine andere Identifikationsnummer erhält, mit der die Prozeduren logisch gruppiert werden können. Durch das Gruppieren von gleichnamigen Prozeduren können diese gleichzeitig gelöscht werden. In derselben Anwendung verwendete Prozeduren werden häufig auf diese Weise gruppiert. Beispielsweise können die mit der Anwendung my_app verwendeten Prozeduren den Namen my_proc; 1, my_proc; 2 usw. haben. Durch Löschen von my_proc wird die gesamte Gruppe gelöscht . Nachdem Prozeduren gruppiert wurden, können einzelne Prozeduren innerhalb der Gruppe nicht gelöscht werden.

Die Verwendung dieses Konstrukts bietet keine zusätzlichen Vorteile, da bei Verwendung desselben Basisnamens nicht einmal eine Überladung möglich ist (Signaturen müssen nicht eindeutig sein und es muss keine automatische Weiterleitung der Ausführung an eine bestimmte "Nummer" erfolgen) Verwenden Sie bei der Ausführung die "Zahl". Daher die Bestimmung von "albern" (und das ist wahrscheinlich viel zu nett dazu ;-).

Solomon Rutzky
quelle