Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Modifica um procedimento previamente criado que foi criado ao executar a instrução CREATE PROCEDURE no SQL Server.
Transact-SQL Convenções de Sintaxe (Transact-SQL)
Sintaxe
-- Syntax for SQL Server and Azure SQL Database
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter_name [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
[;]
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE AS Clause ]
-- Syntax for SQL Server CLR Stored Procedure
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter_name [ type_schema_name. ] data_type }
[ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH EXECUTE AS Clause ]
AS { EXTERNAL NAME assembly_name.class_name.method_name }
[;]
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name
[ { @parameterdata_type } [= ] ] [ ,...n ]
AS { [ BEGIN ] sql_statement [ ; ] [ ,...n ] [ END ] }
[;]
Arguments
schema_name
O nome do esquema ao qual o procedimento pertence.
procedure_name
O nome do procedimento a mudar. Os nomes dos procedimentos devem respeitar as regras relativas aos identificadores de .
;Número
Um inteiro opcional existente que é usado para agrupar procedimentos com o mesmo nome, de modo a que possam ser deixados em conjunto usando uma instrução DROP PROCEDURE.
Observação
Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.
@
parameter_name
Um parâmetro no procedimento. Podem ser especificados até 2.100 parâmetros.
[ type_schema_name. ] data_type
É o tipo de dado do parâmetro e do esquema a que pertence.
Para informações sobre restrições de tipos de dados, veja CRIAR PROCEDIMENTO (Transact-SQL).
VARIANDO
Especifica o conjunto de resultados suportado como um parâmetro de saída. Este parâmetro é construído dinamicamente pelo procedimento armazenado e o seu conteúdo pode variar. Aplica-se apenas aos parâmetros do cursor. Esta opção não é válida para procedimentos CLR.
padrão
É um valor padrão para o parâmetro.
SAÍDAS | REALIZAÇÃO
Indica que o parâmetro é um parâmetro de retorno.
SOMENTE LEITURA
Indica que o parâmetro não pode ser atualizado ou modificado dentro do corpo do procedimento. Se o tipo de parâmetro for um tipo de valor de tabela, READONLY deverá ser especificado.
RECOMPILE
Indica que o Motor de Base de Dados não armazena em cache um plano para este procedimento e que o procedimento é recompilado em tempo de execução.
ENCRIPTAÇÃO
Aplica-se a: SQL Server (SQL Server 2008 (10.0.x) e posterior) e Azure SQL Database.
Indica que o Motor de Base de Dados irá converter o texto original da instrução ALTER PROCEDURE para um formato ofuscado. A saída da ofuscação não é diretamente visível em nenhuma das vistas de catálogo no SQL Server. Utilizadores que não têm acesso a tabelas de sistema ou ficheiros de base de dados não podem recuperar o texto ofuscado. No entanto, o texto estará disponível para utilizadores privilegiados que podem aceder a tabelas do sistema através da porta DAC ou aceder diretamente a ficheiros de base de dados. Além disso, os utilizadores que conseguem anexar um depurador ao processo servidor podem recuperar o procedimento original da memória em tempo de execução. Para obter mais informações sobre como acessar metadados do sistema, consulte Configuração de visibilidade de metadados.
Procedimentos criados com esta opção não podem ser publicados como parte da replicação do SQL Server.
Esta opção não pode ser especificada para procedimentos armazenados em tempo de execução de linguagem comum (CLR).
Observação
Durante uma atualização, o Motor de Base de Dados utiliza os comentários ofuscados armazenados em sys.sql_modules para recriar procedimentos.
EXECUTAR COMO
Especifica o contexto de segurança sob o qual executar o procedimento armazenado após este ser acedido.
Para obter mais informações, consulte Cláusula EXECUTE AS (Transact-SQL).
PARA REPLICAÇÃO
Especifica que procedimentos armazenados criados para replicação não podem ser executados no Assinante. Um procedimento armazenado criado com a opção FOR REPLICATION é usado como filtro de procedimento armazenado e só é executado durante a replicação. Os parâmetros não podem ser declarados se for especificado FOR REPLICATION. Esta opção não é válida para procedimentos CLR. A opção RECOMPILE é ignorada para procedimentos criados com FOR REPLICATION.
Observação
Esta opção não está disponível numa base de dados contida.
{ [ COMEÇAR ] sql_statement [;] [ ... n ] [ FIM ] }
Uma ou mais Transact-SQL declarações que compõem o corpo do processo. Você pode usar as palavras-chave opcionais BEGIN e END para incluir as instruções. Para mais informações, consulte as secções de Boas Práticas, Observações Gerais e Limitações e Restrições em CRIAR PROCEDIMENTO (Transact-SQL).
NOME EXTERNO assembly_name.class_name.method_name
Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
Especifica o método de um assembly do .NET Framework para um procedimento armazenado CLR a referenciar. class_name deve ser um identificador válido do SQL Server e deve existir como uma classe no assembly. Se a classe tiver um nome qualificado para espaço de nomes usar um ponto (.) para separar as partes do espaço de nomes, o nome da classe deve ser delimitado por parênteses ([]) ou aspas (""). O método especificado deve ser um método estático da classe.
Por defeito, o SQL Server não pode executar código CLR. Pode criar, modificar e disponibilizar objetos de base de dados que fazem referência a módulos de runtime de linguagem comum; no entanto, não pode executar estas referências no SQL Server até ativar a opção habilitada pelo CLR. Para ativar a opção, use sp_configure.
Observação
Os procedimentos CLR não são suportados em um banco de dados contido.
Observações gerais
Transact-SQL Os procedimentos armazenados não podem ser modificados para procedimentos CLR armazenados e vice-versa.
ALTER PROCEDURE não altera permissões nem afeta quaisquer procedimentos armazenados dependentes ou triggers. No entanto, as definições atuais da sessão para QUOTED_IDENTIFIER e ANSI_NULLS são incluídas no procedimento armazenado quando este é modificado. Se as definições forem diferentes das que estavam em vigor quando o procedimento armazenado foi originalmente criado, o comportamento do procedimento armazenado pode mudar.
Se uma definição de procedimento anterior foi criada usando WITH ENCRYPTION ou WITH RECOMPILE, estas opções só são ativadas se estiverem incluídas no ALTER PROCEDURE.
Para mais informações sobre procedimentos armazenados, consulte CRIAR PROCEDIMENTO (Transact-SQL).
Segurança
Permissions
Requer permissão ALTER no procedimento ou requer pertença ao papel de base de dados fixo db_ddladmin .
Examples
O exemplo seguinte cria o uspVendorAllInfo procedimento armazenado. Este procedimento devolve os nomes de todos os fornecedores que fornecem a Adventure Works Cycles, os produtos que fornecem, as suas classificações de crédito e a sua disponibilidade. Após a criação deste procedimento, é modificado para devolver um conjunto de resultados diferente.
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 '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
O exemplo seguinte altera o uspVendorAllInfo procedimento armazenado. Remove a cláusula EXECUTE AS CALLER e modifica o corpo do procedimento para devolver apenas os fornecedores que fornecem o produto especificado. As funções LEFT e CASE personalizam a aparência do conjunto de resultados.
USE AdventureWorks2022;
GO
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
Aqui está o conjunto de resultados.
Vendor Product name Rating Availability
-------------------- ------------- ------- ------------
Proseware, Inc. LL Crankarm Average No
Vision Cycles, Inc. LL Crankarm Superior Yes
(2 row(s) affected)`
Ver também
CRIAR PROCEDIMENTO (Transact-SQL)
PROCEDIMENTO DE QUEDA (Transact-SQL)
EXECUTAR (Transact-SQL)
EXECUTAR COMO (Transact-SQL)
EVENTDATA (Transact-SQL)
procedimentos armazenados (Mecanismo de Banco de Dados)
sys.procedures (Transact-SQL)