ALTER PROCEDURE (Transact-SQL)
Data aggiornamento: 5 dicembre 2005
Consente di modificare una procedura creata in precedenza tramite l'istruzione CREATE PROCEDURE. ALTER PROCEDURE non altera le autorizzazioni e non ha effetto sulle stored procedure o sui trigger dipendenti. Le impostazioni della sessione corrente per QUOTED_IDENTIFIER e ANSI_NULLS, tuttavia, vengono incluse nella stored procedure quando viene modificata. Se queste impostazioni sono diverse rispetto a quelle applicate quando la stored procedure è stata creata, il funzionamento della stored procedure potrebbe cambiare.
Convenzioni della sintassi Transact-SQL
Sintassi
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ [ OUT [ PUT ]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS
{ <sql_statement> [ ...n ] | <method_specifier> }
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE_AS_Clause ]
<sql_statement> ::=
{ [ BEGIN ] statements [ END ] }
<method_specifier> ::=
EXTERNAL NAME
assembly_name.class_name.method_name
Argomenti
- schema_name
Nome dello schema a cui appartiene la procedura.
- procedure_name
Nome della procedura da modificare. I nomi delle procedure devono essere conformi alle regole per gli identificatori.
**;**number
Valore integer facoltativo esistente utilizzato per raggruppare procedure con lo stesso nome in modo da poterle rimuovere tramite un'unica istruzione DROP PROCEDURE.[!NOTA] Questa funzionalità verrà rimossa in una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
- **@**parameter
Parametro della procedura. È possibile specificare un massimo di 2.100 parametri.
[ type_schema_name**.** ] data_type
Tipo di dati del parametro e schema a cui appartiene.Per informazioni sulle restrizioni dei tipi di dati, vedere CREATE PROCEDURE (Transact-SQL).
- VARYING
Specifica il set di risultati supportato come parametro di output. Questo parametro viene creato in modo dinamico dalla stored procedure e il relativo contenuto può variare. Viene utilizzato solo con parametri di cursore.
- default
Valore predefinito per il parametro.
- OUTPUT
Indica che si tratta di un parametro restituito.
- RECOMPILE
Specifica che Motore di database di SQL Server 2005 non memorizza nella cache un piano per la procedura e che la procedura viene ricompilata in fase di esecuzione.
ENCRYPTION
Indica che il testo originale dell'istruzione ALTER PROCEDURE verrà convertito dal Motore di database in un formato offuscato. L'output dell'offuscamento non è visibile direttamente nelle viste del catalogo in SQL Server 2005. Gli utenti che non hanno accesso a tabelle di sistema o file del database non possono recuperare il testo offuscato. Il testo, tuttavia, sarà disponibile per gli utenti con privilegi di accesso a tabelle di sistema attraverso la porta DAC oppure di accesso diretto a file del database. Gli utenti in grado di collegare un debugger al processo del server possono inoltre recuperare la procedura originale dalla memoria in fase di esecuzione. Per ulteriori informazioni sull'accesso ai metadati di sistema, vedere Configurazione della visibilità dei metadati.Le procedure create con questa opzione non possono essere pubblicate durante la replica di SQL Server.
Questa opzione non può essere specificata per stored procedure CLR (Common Language Runtime).
[!NOTA] Durante un aggiornamento, i commenti offuscati archiviati nella tabella sys.sql_modules vengono utilizzati dal Motore di database per ricreare procedure.
EXECUTE AS
Specifica il contesto di protezione in cui deve essere eseguita la stored procedure dopo l'accesso.Per ulteriori informazioni, vedere Clausola EXECUTE AS (Transact-SQL).
- FOR REPLICATION
Specifica che le stored procedure create per la replica non possono essere eseguite nel Sottoscrittore. Una stored procedure creata con l'opzione FOR REPLICATION viene utilizzata come filtro di stored procedure ed eseguita solo durante la replica. Se viene specificata l'opzione FOR REPLICATION, non è possibile dichiarare alcun parametro. L'opzione RECOMPILE viene ignorata per le procedure create con l'opzione FOR REPLICATION.
- AS
Azioni che la procedura deve eseguire.
- <sql_statement>
Una o più istruzioni Transact-SQL di qualunque tipo da includere nella procedura. Sono previste alcune limitazioni. Per ulteriori informazioni, vedere "Limitazioni di <sql_statement>" in CREATE PROCEDURE (Transact-SQL).
EXTERNAL NAME , assembly_name**.class_name.method_name
Specifica il metodo di un assembly Microsoft .NET Framework a cui deve fare riferimento una stored procedure CLR. class_name deve essere un identificatore di SQL Server valido e deve esistere come classe nell'assembly. Se alla classe è stato assegnato un nome completo con lo spazio dei nomi le cui parti sono separate da un punto (.), il nome della classe deve essere delimitato tramite parentesi ([]) o virgolette (""**). Il metodo specificato deve essere un metodo statico della classe.[!NOTA] Per impostazione predefinita, SQL Server non può eseguire il codice CLR. È possibile creare, modificare ed eliminare gli oggetti di database che fanno riferimento a moduli CLR. È tuttavia possibile eseguire questi riferimenti in SQL Server solo dopo aver attivato l'opzione clr enabled. Per abilitare questa opzione, utilizzare sp_configure.
Osservazioni
Non è possibile convertire stored procedure Transact-SQL in stored procedure CLR e viceversa.
Per ulteriori informazioni, vedere la sezione Osservazioni in CREATE PROCEDURE (Transact-SQL).
[!NOTA] Se in precedenza è stata creata una definizione di procedura con l'opzione WITH ENCRYPTION o WITH RECOMPILE, tale opzione viene attivata solo se è inclusa nell'istruzione ALTER PROCEDURE.
Autorizzazioni
È richiesta l'autorizzazione ALTER per la procedura.
Esempi
Nell'esempio seguente viene creata la stored procedure uspVendorAllInfo
, che restituisce i nomi di tutti i fornitori di Adventure Works Cycles, i prodotti da essi forniti nonché le informazioni relative alla posizione creditizia e alla disponibilità. Questa procedura viene quindi modificata in modo da restituire un set di risultati diverso.
USE AdventureWorks;
GO
IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL
DROP PROCEDURE Purchasing.uspVendorAllInfo;
GO
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 'Credit Rating',
v.ActiveFlag AS Availability
FROM Purchasing.Vendor v
INNER JOIN Purchasing.ProductVendor pv
ON v.VendorID = pv.VendorID
INNER JOIN Production.Product p
ON pv.ProductID = p.ProductID
ORDER BY v.Name ASC;
GO
Nell'esempio seguente la stored procedure uspVendorAllInfo
viene modificata (senza l'opzione EXECUTE AS) in modo da restituire solo i fornitori del prodotto specificato. Le funzioni LEFT
e CASE
personalizzano l'aspetto del set di risultati.
ALTER PROCEDURE Purchasing.uspVendorAllInfo
@Product varchar(25)
AS
SELECT LEFT(v.Name, 25) AS Vendor, LEFT(p.Name, 25) AS 'Product name',
'Credit 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.VendorID = pv.VendorID
INNER JOIN Production.Product AS p
ON pv.ProductID = p.ProductID
WHERE p.Name LIKE @Product
ORDER BY v.Name ASC;
GO
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';
GO
Set di risultati:
Vendor Product name Credit rating Availability
-------------------- ------------------- ------------- ------------
Proseware, Inc. LL Crankarm Average No
Vision Cycles, Inc. LL Crankarm Superior Yes
(2 row(s) affected)
Vedere anche
Riferimento
CREATE PROCEDURE (Transact-SQL)
Elementi del linguaggio per il controllo di flusso (Transact-SQL)
Tipi di dati (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL)
EXECUTE AS (Transact-SQL)
EVENTDATA (Transact-SQL)
Funzioni (Transact-SQL)
sp_depends (Transact-SQL)
sp_procoption (Transact-SQL)
sp_recompile (Transact-SQL)
sys.sql_modules (Transact-SQL)
sys.parameters (Transact-SQL)
sys.procedures (Transact-SQL)
sys.sql_dependencies (Transact-SQL)
sys.assembly_modules (Transact-SQL)
sys.numbered_procedures (Transact-SQL)
sys.numbered_procedure_parameters (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)
Altre risorse
Batch
Cursori (Motore di database)
Stored procedure (Motore del database)
Utilizzo di variabili e parametri (Motore di database)
Modifiche allo schema nei database di pubblicazione
Procedura: Modifica di una stored procedure (SQL Server Management Studio)
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
5 dicembre 2005 |
|