Partilhar via


ALTERAR O PROCEDIMENTO (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase 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)