In SQL Server, qual è lo scopo del raggruppamento di stored procedure?


35

Uno dei problemi più imbarazzanti con cui ho avuto a che fare riguarda i gruppi di Stored procedure. Data una procedura memorizzata, usp_DoSomethingAwesomeposso creare quel proc in un altro gruppo chiamandolo usp_DoSomethingAwesome;2.

Ho scoperto questo durante la risoluzione di alcuni problemi di replica (Publisher: SQL 2000 Ent., Dist / Sub: 2008 R2 Ent.) Sorti con alcune delle procedure memorizzate di replica Insert, Update ed Delete generate dal sistema.

Qual è lo scopo / pensiero alla base di questa capacità di "raggruppamento"?

Risposte:


32

È come sovraccaricare un metodo. In sostanza, è possibile creare due o più versioni della procedura memorizzata, in cui ciascuna fa cose diverse: prendere un numero diverso di parametri, operare su tabelle diverse, avere output diverso, ecc.

Si chiamano Procedure numerate e sono assolutamente deprecate ( annunciate dal 2005 ). Sono ancora supportati in SQL Server 2012, ma alcune funzionalità non funzionano bene con loro. Ad esempio, sono considerati una violazione del contenimento nei database contenuti e qualsiasi procedura numerata> 1 non verrà creata:

Messaggio 12829, livello 16, stato 1, procedura blat, riga 1
La procedura memorizzata "dbo.blat" si riferisce a un gruppo di procedure memorizzate numerate. Le stored procedure numerate non sono disponibili nei database contenuti. Per ulteriori informazioni sui database contenuti, consultare l'argomento Libri online.


5

La capacità (deprecata) di raggruppare Stored Procedure sembra esistere per un unico (e piuttosto sciocco) scopo: la capacità di cancellare in massa tramite una singola DROPistruzione. Secondo la documentazione MSDN di SQL Server 2000 per la creazione di una stored procedure :

Raggruppamento
È possibile creare una procedura con lo stesso nome di una procedura memorizzata esistente se viene assegnato un numero di identificazione diverso, che consente di raggruppare le procedure logicamente. Le procedure di raggruppamento con lo stesso nome consentono di eliminarle contemporaneamente. Le procedure utilizzate nella stessa applicazione sono spesso raggruppate in questo modo. Ad esempio, le procedure utilizzate con l' applicazione my_app potrebbero essere denominate my_proc; 1, my_proc; 2 e così via. L'eliminazione di my_proc elimina l'intero gruppo. Dopo che le procedure sono state raggruppate, le singole procedure all'interno del gruppo non possono essere eliminate.

Non ci sono ulteriori vantaggi nell'uso di questo costrutto dato che l'uso dello stesso nome di base non consente nemmeno il sovraccarico (le firme non devono essere univoche e nessun routing di esecuzione automatica a un particolare "numero") e quindi è ancora necessario utilizzare il "numero" durante l'esecuzione. Da qui la determinazione di "sciocco" (e questo è probabilmente troppo bello al riguardo ;-).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.