Modificare una stored procedure
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Database SQL in Microsoft Fabric
Questo articolo illustra come modificare una stored procedure in SQL Server usando SQL Server Management Studio o Transact-SQL.
Limiti
Le stored procedure Transact-SQL non possono essere convertite in stored procedure CLR e viceversa.
Se la definizione della procedura precedente è stata creata utilizzando le opzioni WITH ENCRYPTION
o WITH RECOMPILE
, queste opzioni vengono abilitate solo se incluse nell'istruzione ALTER PROCEDURE
.
Autorizzazioni
È richiesta l'autorizzazione ALTER PROCEDURE per la procedura.
Uso di SQL Server Management Studio
Per modificare una procedura in SQL Server Management Studio:
In Esplora oggetti, connettersi a un'istanza del Motore di Database e quindi espandere quell'istanza.
Espandere Database, espandere il database a cui appartiene la procedura, e quindi espandere Programmabilità.
Espandere Stored procedure, fare clic con il pulsante destro del mouse sulla stored procedure da modificare, quindi scegliere Modifica.
Modificare il testo della stored procedure.
Per controllare la sintassi, scegliere Analizza dal menu Query.
Per salvare le modifiche alla definizione della procedura, scegliere Esegui dal menu Query.
Per salvare la definizione della procedura aggiornata come script Transact-SQL, dal menu File, selezionare Salva con nome. Accettare il nome del file o sostituirlo con uno nuovo, quindi selezionare Salva.
Importante
Convalidare tutti gli input utente. Non concatenare l'input dell'utente prima di averlo convalidato. Non eseguire mai un comando creato dall'input dell'utente non convalidato. L'input utente non convalidato rende il database vulnerabile a un tipo di exploit denominato attacco SQL injection. Per altre informazioni, vedere Attacco intrusivo nel codice SQL.
Usare Transact-SQL
Per modificare una procedura usando i comandi T-SQL:
In Esplora oggetti, connettersi a un'istanza del motore di database e quindi espanderla.
Espandi Database, quindi espandi il database a cui appartiene la stored procedure. In alternativa, selezionare il database nell'elenco dei database disponibili sulla barra degli strumenti. Per questo esempio, selezionare il database
AdventureWorks2022
.Scegliere Nuova query dal menu File.
Copiare e incollare l'esempio seguente nell'editor di query. Nell'esempio viene creata la stored procedure
Purchasing.uspVendorAllInfo
mediante la quale vengono restituiti i nomi di tutti i fornitori nel database Adventure Works Cycles, i prodotti da essi forniti, nonché le informazioni relative alla posizione creditizia e alla disponibilità.CREATE PROCEDURE Purchasing.uspVendorAllInfo WITH EXECUTE AS CALLER AS SET NOCOUNT ON; SELECT v.Name AS Vendor, p.Name AS 'Product name', v.CreditRating AS 'Rating', v.ActiveFlag AS Availability FROM Purchasing.Vendor v INNER JOIN Purchasing.ProductVendor pv ON v.BusinessEntityID = pv.BusinessEntityID INNER JOIN Production.Product p ON pv.ProductID = p.ProductID ORDER BY v.Name ASC; GO
Scegliere Nuova query dal menu File.
Copiare e incollare l'esempio seguente nell'editor di query. L'esempio modifica la procedura
uspVendorAllInfo
. La clausolaEXECUTE AS CALLER
viene rimossa e il corpo della stored procedure viene modificato in modo da restituire solo i fornitori del prodotto specificato. Le funzioniLEFT
eCASE
personalizzano l'aspetto del set di risultati.Importante
L'eliminazione e la ricreazione di una stored procedure esistente rimuove le autorizzazioni concesse in modo esplicito alla stored procedure. Utilizzare invece
ALTER
per modificare la stored procedure esistente.ALTER PROCEDURE Purchasing.uspVendorAllInfo @Product varchar(25) AS SET NOCOUNT ON; SELECT LEFT(v.Name, 25) AS Vendor, LEFT(p.Name, 25) AS 'Product name', 'Rating' = CASE v.CreditRating WHEN 1 THEN 'Superior' WHEN 2 THEN 'Excellent' WHEN 3 THEN 'Above average' WHEN 4 THEN 'Average' WHEN 5 THEN 'Below average' ELSE 'No rating' END , Availability = CASE v.ActiveFlag WHEN 1 THEN 'Yes' ELSE 'No' END FROM Purchasing.Vendor AS v INNER JOIN Purchasing.ProductVendor AS pv ON v.BusinessEntityID = pv.BusinessEntityID INNER JOIN Production.Product AS p ON pv.ProductID = p.ProductID WHERE p.Name LIKE @Product ORDER BY v.Name ASC; GO
Per salvare le modifiche alla definizione della procedura, dal menu Query, scegliere Esegui.
Per salvare la definizione della stored procedure aggiornata come script Transact-SQL, scegliere Salva con nome dal menu File. Accettare il nome del file o sostituirlo con uno nuovo, quindi selezionare Salva.
Per eseguire la stored procedure modificata, eseguire l'esempio riportato di seguito.
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO