Condividi tramite


Stored procedure (Motore di database)

Si applica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema di Piattaforma Analitica (PDW)Database SQL in Microsoft Fabric

In SQL Server una stored procedure è un gruppo di una o più istruzioni di Transact-SQL oppure un riferimento a un metodo CLR (Common Runtime Language) di Microsoft .NET Framework. Le stored procedure assomigliano ai costrutti di altri linguaggi di programmazione perché possono essere utilizzate per:

  • Accettare parametri di input e restituire più valori sotto forma di parametri di output al programma che esegue la chiamata.

  • Includere istruzioni di programmazione che eseguono operazioni nel database, Queste dichiarazioni includono la chiamata ad altre procedure.

  • Restituire un valore di stato a un programma che esegue la chiamata per indicare l'esito positivo o negativo (e il motivo dell'esito negativo).

Vantaggi dell'utilizzo delle stored procedure

Nell'elenco seguente vengono descritti alcuni vantaggi dell'utilizzo di stored procedure.

Riduzione del traffico di rete server/client

I comandi in una stored procedure vengono eseguiti come un solo batch di codice. Questo approccio può ridurre significativamente il traffico di rete tra il server e il client perché solo la chiamata per eseguire la procedura viene inviata attraverso la rete. Senza l'incapsulamento del codice consentito dalla stored procedure, la rete viene attraversata da ogni singola riga di codice.

Maggiore sicurezza

Tramite una stored procedure, più utenti e programmi client sono in grado di eseguire operazioni su oggetti di database sottostanti, anche se gli utenti e i programmi non dispongono di autorizzazioni dirette su tali oggetti sottostanti. La stored procedure consente di controllare quali processi e attività vengono eseguiti e di proteggere gli oggetti di database sottostanti. Questo approccio elimina il requisito di concedere le autorizzazioni a livello di singolo oggetto e semplifica i livelli di sicurezza.

È possibile specificare la clausola EXECUTE AS nell'istruzione CREATE PROCEDURE per consentire la rappresentazione di un altro utente o consentire a utenti o applicazioni di eseguire alcune attività nel database senza il bisogno di autorizzazioni dirette per gli oggetti e i comandi sottostanti. Per alcune azioni ad esempio, come TRUNCATE TABLE, non è possibile concedere le autorizzazioni. Per eseguire TRUNCATE TABLE è necessario che l'utente disponga delle autorizzazioni ALTER per la tabella specificata. Non è consigliabile concedere a un utente le autorizzazioni ALTER su una tabella, perché l'utente disporrebbe di autorizzazioni ben superiori alla semplice possibilità di troncare la tabella. Incorporando l'istruzione TRUNCATE TABLE in un modulo e specificando che tale modulo venga eseguito come un utente che dispone di autorizzazioni per la modifica della tabella, è possibile estendere le autorizzazioni per il troncamento della tabella all'utente al quale si concedono le autorizzazioni EXECUTE sul modulo.

Quando un'applicazione chiama una stored procedure attraverso la rete, solo la chiamata per eseguire la stored procedure è visibile. Pertanto, gli utenti malintenzionati non possono visualizzare i nomi di oggetti database e tabelle, né incorporare le istruzioni di Transact-SQL personalizzate o cercare dati critici.

L'utilizzo dei parametri della stored procedure aiuta a proteggersi da attacchi SQL injection. Dal momento che l'input del parametro viene trattato come un valore letterale e non come codice eseguibile, è più difficile che un utente malintenzionato riesca a inserire un comando nelle istruzioni di Transact-SQL all'interno della stored procedure compromettendo la sicurezza.

È possibile crittografare le procedure per offuscare il codice sorgente. Per altre informazioni, vedere Crittografia di SQL Server.

Riutilizzo del codice

Il codice per qualsiasi operazione di database ripetitiva è una candidata perfetta per l'incapsulamento nella procedura. Questo approccio elimina le riscrizioni inutili dello stesso codice, riduce l'incoerenza del codice e consente a qualsiasi utente o applicazione con le autorizzazioni necessarie di accedere ed eseguire il codice.

Semplificazione della manutenzione

Quando le applicazioni client chiamano le procedure e mantengono le operazioni del database nel livello dati, è sufficiente aggiornare le procedure per eventuali modifiche nel database sottostante. Il livello applicazione rimane separato e non deve conoscere le modifiche apportate a layout, relazioni o processi del database.

Prestazioni migliorate

Per impostazione predefinita, una routine compila la prima volta che viene eseguita e crea un piano di esecuzione che riutilizza per le esecuzioni successive. Dal momento che non è necessaria la creazione di un nuovo piano da parte del sistema di elaborazione delle query, l'elaborazione della stored procedure richiede generalmente un tempo minore.

Se sono presenti modifiche significative alle tabelle o ai dati a cui fa riferimento la stored procedure, il piano precompilato potrebbe determinare in realtà un'esecuzione più lenta della stored procedure. In questo caso, la ricompilazione della stored procedure e la forzatura di un nuovo piano di esecuzione possono migliorare le prestazioni.

Tipi di stored procedure

User-defined

È possibile creare una stored procedure definita dall'utente in un database definito dall'utente o in tutti i database di sistema a eccezione del database Resource. La procedura può essere sviluppata in Transact-SQL o come riferimento a un metodo CLR (Common Runtime Language) di .NET Framework.

Temporary

Le stored procedure temporanee sono un tipo di stored procedure definite dall'utente. Le stored procedure temporanee sono come una stored procedure permanente, tranne per il fatto che sono archiviate in tempdb. Esistono due tipi di stored procedure temporanee: locali e globali. I due tipi differiscono per i nomi, la visibilità e la disponibilità. Le procedure temporanee locali hanno un segno di numero singolo (#) come primo carattere dei nomi. Sono visibili solo alla connessione utente corrente e vengono eliminati quando la connessione viene chiusa. Le procedure temporanee globali hanno due segni di numero (##) come primi due caratteri dei nomi. Sono visibili a qualsiasi utente dopo la creazione e vengono eliminati alla fine dell'ultima sessione usando la procedura.

System

Le stored procedure di sistema sono incluse nel motore di database. Vengono archiviati fisicamente nel database interno, nascosto Resource e vengono visualizzati logicamente nello sys schema di ogni database definito dal sistema e definito dall'utente. Inoltre, il database msdb contiene anche stored procedure di sistema nello schema dbo che vengono utilizzate per la pianificazione di avvisi e processi. Poiché le procedure di sistema iniziano con il prefisso sp_, non usare questo prefisso quando si assegnano nomi a procedure definite dall'utente. Per un elenco completo delle procedure memorizzate di sistema, vedere Procedure di sistema memorizzate.

SQL Server supporta le stored procedure di sistema che forniscono ai programmi esterni un'interfaccia di SQL Server per varie attività di manutenzione. Queste stored procedure estese utilizzano il prefisso xp_. Per un elenco completo delle procedure estese, vedere Procedure di memorizzazione generale estese.

Estensione definita dall'utente

Le stored procedure estese permettono di creare routine esterne in un linguaggio di programmazione come C e sono DLL che possono essere caricate ed eseguite in modo dinamico da un'istanza di SQL Server.

Note

Le stored procedure estese verranno rimosse nelle future versioni di SQL Server. Non usare questa funzionalità in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui è attualmente implementata. In alternativa, creare stored procedure CLR. Questo metodo offre un'alternativa più efficiente rispetto alla scrittura di stored procedure estese.

Descrizione attività Article
Viene descritto il processo di creazione di una stored procedure. Creare una stored procedure
Viene descritto il processo di modifica di una stored procedure. Modificare una stored procedure
Viene descritto il processo di eliminazione di una stored procedure. Eliminare un stored procedure
Viene descritto come eseguire una stored procedure. Eseguire una stored procedure
Viene descritto come concedere autorizzazioni per una stored procedure. Concedere autorizzazioni per una stored procedure
Viene descritto come restituire dati da una stored procedure a un'applicazione. Restituire dati da una stored procedure
Viene descritto come ricompilare una stored procedure. Ricompilare una stored procedure
Viene descritto come ridenominare una stored procedure. Rinominare una stored procedure
Viene descritto come visualizzare la definizione di una stored procedure. Visualizzare la definizione di una stored procedure
Viene descritto come visualizzare ciò che dipende da una stored procedure. Visualizzare le dipendenze di una stored procedure
Viene descritta la modalità d'uso dei parametri in una stored procedure. Parameters