ALTER PROCEDURE (Transact-SQL)
Modifica um procedimento criado anteriormente executando a instrução CREATE PROCEDURE. ALTER PROCEDURE não altera permissões e não afeta qualquer procedimento armazenado dependente ou disparadores. Entretanto, as configurações da sessão atual para QUOTED_IDENTIFIER e ANSI_NULLS são incluídas no procedimento armazenado quando ele é modificado. Se as configurações forem diferentes da que estavam em vigor quando o procedimento armazenado foi originalmente criado, o comportamento do procedimento armazenado poderá mudar.
Sintaxe
--Transact-SQL Stored Procedure Syntax
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ;number ]
[ { @parameter [ 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 ]
--CLR Stored Procedure Syntax
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ;number ]
[ { @parameter [ type_schema_name. ] data_type }
[ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH EXECUTE AS Clause ]
AS { EXTERNAL NAME assembly_name.class_name.method_name }
[;]
Argumentos
schema_name
É o nome do esquema ao qual o procedimento pertence.procedure_name
É o nome do procedimento a ser alterado. Os nomes de procedimento devem estar de acordo com as regras para identificadores.**;**number
É um inteiro opcional existente que é usado para agrupar procedimentos do mesmo nome de forma que possam ser descartados juntos usando uma instrução DROP PROCEDURE.Observação Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.
**@**parameter
É um parâmetro no procedimento. Podem ser especificados até 2.100 parâmetros.[ type_schema_name**.** ] data_type
É o tipo de dados do parâmetro e o esquema ao qual ele pertence.Para obter mais informações sobre restrições de tipos de dados, consulte CREATE PROCEDURE (Transact-SQL).
VARYING
Especifica o conjunto de resultados com suporte como um parâmetro de saída. Este parâmetro é construído dinamicamente pelo procedimento armazenado e seu conteúdo pode variar. Aplica-se apenas a parâmetros de cursor.default
É um valor padrão para o parâmetro.OUT | OUTPUT
Indica que o parâmetro é de retorno.READONLY
Indica que o parâmetro não pode ser atualizado nem modificado no corpo do procedimento. Se o tipo de parâmetro for um tipo com valor de tabela, READONLY deverá ser especificado.RECOMPILE
Indica que o Mecanismo de Banco de Dados do SQL Server 2005 não armazena em cache um plano para esse procedimento e o procedimento é recompilado em tempo de execução.ENCRYPTION
Indica que o Mecanismo de Banco de Dados converterá o texto original da instrução ALTER PROCEDURE em um formato ofuscado. A saída do ofuscamento não é diretamente visível em quaisquer exibições de catálogo no SQL Server 2005. Os usuários que não tiverem acesso a tabelas do sistema ou arquivos de banco de dados não poderão recuperar o texto ofuscado. Entretanto, o texto estará disponível para usuários privilegiados que puderem acessar as tabelas de sistema na porta DAC ou acessar diretamente os arquivos do banco de dados. Além disso, os usuários que podem anexar um depurador ao processo de servidor podem recuperar o procedimento original da memória em tempo de execução. Para obter mais informações sobre como acessar os metadados do sistema, consulte Configuração de visibilidade de metadados.Procedimentos criados com esta opção não podem ser publicados como parte de replicação do SQL Server.
Esta opção não pode ser especificada para procedimentos armazenados CLR (Common Language Runtime).
Observação Durante uma atualização, o Mecanismo de Banco de Dados usa os comentários ofuscados armazenados em sys.sql_modules para recriar procedimentos.
EXECUTE AS
Especifica o contexto de segurança sob o qual o procedimento armazenado é executado depois de ser acessado.Para obter mais informações, consulte Cláusula EXECUTE AS (Transact-SQL).
FOR REPLICATION
Especifica que procedimentos armazenados que são criados para replicação não podem ser executados no Assinante. Um procedimento armazenado criado com a opção FOR REPLICATION é usado como um filtro de procedimento armazenado e é executado somente durante a replicação. Os parâmetros não poderão ser declarados se FOR REPLICATION for especificado. A opção RECOMPILE é ignorada para procedimentos criados com FOR REPLICATION.AS
São as ações que o procedimento deve efetuar.<sql_statement>
É qualquer quantidade e tipo de instruções Transact-SQL a serem incluídos no procedimento. Algumas limitações são aplicáveis. Para obter mais informações, consulte "Limitações em <sql_statement>"CREATE PROCEDURE (Transact-SQL).EXTERNAL NAME assembly_name**.class_name.method_name
Especifica o método de um assembly Microsoft.NET Framework para um procedimento CLR armazenado a ser referenciado. 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 de namespace que use um ponto (.) para separar partes do namespace, o nome da classe deverá ser delimitado usando colchetes ([** ]) ou aspas (" "). O método especificado deve ser um método estático da classe.Observação Por padrão, o SQL Server não pode executar código CLR. Você pode criar, modificar e descartar objetos de banco de dados que façam referência a módulos CLR; entretanto, não pode executar essas referências no SQL Server até habilitar a opção clr enabled. Para habilitar essa opção, use sp_configure.
Comentários
Os procedimentos armazenados Transact-SQL não podem ser modificados para ser procedimentos armazenados de CLR e vice-versa.
Para obter mais informações, consulte a seção de comentários em CREATE PROCEDURE (Transact-SQL).
Observação |
---|
Se a definição de procedimento anterior foi criada com WITH ENCRYPTION ou WITH RECOMPILE, essas opções estarão habilitadas apenas se foram incluídas em ALTER PROCEDURE. |
Permissões
Requer a permissão ALTER no procedimento.
Exemplos
O exemplo a seguir cria o procedimento armazenado uspVendorAllInfo. Esse procedimento retorna os nomes de todos os fornecedores que oferecem Adventure Works Cycles, os produtos que eles fornecem, suas classificações de crédito e sua disponibilidade. Depois que de ser criado, este procedimento é modificado para retornar um conjunto de resultados diferente.
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
O exemplo a seguir altera o procedimento armazenado uspVendorAllInfo (sem a opção EXECUTE AS) para retornar apenas os fornecedores que oferecem o produto especificado. As funções LEFT e CASE personalizam a aparência do conjunto de resultados.
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
Conjunto de resultados.
Vendor Product name Credit rating Availability
-------------------- ------------------- ------------- ------------
Proseware, Inc. LL Crankarm Average No
Vision Cycles, Inc. LL Crankarm Superior Yes
(2 row(s) affected)
Consulte também