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
Altera uma função Transact-SQL ou CLR existente que foi criada anteriormente executando a instrução, sem alterar permissões CREATE FUNCTION e sem afetar quaisquer funções dependentes, procedimentos armazenados ou gatilhos.
Tip
Você pode especificar CREATE OR ALTER FUNCTION para criar uma nova função se uma não existir por esse nome, ou alterar uma função existente, em uma única instrução.
Transact-SQL convenções de sintaxe
Syntax
-- Transact-SQL Scalar Function Syntax
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]
-- Transact-SQL Inline Table-Valued Function Syntax
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS TABLE
[ WITH <function_option> [ ,...n ] ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
[ ; ]
-- Transact-SQL Multistatement Table-valued Function Syntax
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS @return_variable TABLE <table_type_definition>
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
[ ; ]
-- Transact-SQL Function Clauses
<function_option>::=
{
[ ENCRYPTION ]
| [ SCHEMABINDING ]
| [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
| [ EXECUTE_AS_Clause ]
}
<table_type_definition>:: =
( { <column_definition> <column_constraint>
| <computed_column_definition> }
[ <table_constraint> ] [ ,...n ]
)
<column_definition>::=
{
{ column_name data_type }
[ [ DEFAULT constant_expression ]
[ COLLATE collation_name ] | [ ROWGUIDCOL ]
]
| [ IDENTITY [ (seed , increment ) ] ]
[ <column_constraint> [ ...n ] ]
}
<column_constraint>::=
{
[ NULL | NOT NULL ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor
| WITH ( < index_option > [ , ...n ] )
[ ON { filegroup | "default" } ]
| [ CHECK ( logical_expression ) ] [ ,...n ]
}
<computed_column_definition>::=
column_name AS computed_column_expression
<table_constraint>::=
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
( column_name [ ASC | DESC ] [ ,...n ] )
[ WITH FILLFACTOR = fillfactor
| WITH ( <index_option> [ , ...n ] )
| [ CHECK ( logical_expression ) ] [ ,...n ]
}
<index_option>::=
{
PAD_INDEX = { ON | OFF }
| FILLFACTOR = fillfactor
| IGNORE_DUP_KEY = { ON | OFF }
| STATISTICS_NORECOMPUTE = { ON | OFF }
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS ={ ON | OFF }
}
-- CLR Scalar and Table-Valued Function Syntax
ALTER FUNCTION [ schema_name. ] function_name
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
)
RETURNS { return_data_type | TABLE <clr_table_type_definition> }
[ WITH <clr_function_option> [ ,...n ] ]
[ AS ] EXTERNAL NAME <method_specifier>
[ ; ]
-- CLR Function Clauses
<method_specifier>::=
assembly_name.class_name.method_name
<clr_function_option>::=
}
[ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
| [ EXECUTE_AS_Clause ]
}
<clr_table_type_definition>::=
( { column_name data_type } [ ,...n ] )
-- Syntax for In-Memory OLTP: Natively compiled, scalar user-defined function
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type
[ NULL | NOT NULL ] [ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN ATOMIC WITH (set_option [ ,... n ])
function_body
RETURN scalar_expression
END
<function_option>::=
{ | NATIVE_COMPILATION
| SCHEMABINDING
| [ EXECUTE_AS_Clause ]
| [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
}
Arguments
schema_name
O nome do esquema ao qual a função definida pelo usuário pertence.
function_name
A função definida pelo usuário a ser alterada.
Note
Parênteses são necessários após o nome da função, mesmo que um parâmetro não seja especificado.
@ parameter_name
Um parâmetro na função definida pelo usuário. Um ou mais parâmetros podem ser declarados.
Uma função pode ter um máximo de 2.100 parâmetros. O valor de cada parâmetro declarado deve ser fornecido pelo usuário quando a função é executada, a menos que um padrão para o parâmetro seja definido.
Especifique um nome de parâmetro usando um sinal de arroba (@) como o primeiro caractere. O nome do parâmetro deve estar em conformidade com as regras para identificadores. Os parâmetros são locais para a função; Os mesmos nomes de parâmetros podem ser usados em outras funções. Os parâmetros podem tomar o lugar apenas de constantes; Eles não podem ser usados em vez de nomes de tabela, nomes de coluna ou nomes de outros objetos de banco de dados.
Note
ANSI_WARNINGS não é honrado ao passar parâmetros em um procedimento armazenado, função definida pelo usuário ou ao declarar e definir variáveis em uma instrução batch. Por exemplo, se uma variável for definida como char(3) e, em seguida, definida como um valor maior que três caracteres, os dados serão truncados para o tamanho definido e a instrução INSERT ou UPDATE será bem-sucedida.
[ type_schema_name. ] parameter_data_type
É o tipo de dados do parâmetro e, opcionalmente, o esquema ao qual ele pertence. Para funções Transact-SQL, todos os tipos de dados, incluindo tipos CLR definidos pelo usuário, são permitidos, exceto o tipo de dados de carimbo de data/hora . Para funções CLR, todos os tipos de dados, incluindo tipos definidos pelo usuário CLR, são permitidos, exceto texto, ntext, imagem e tipos de dados de carimbo de data/hora . Os tipos não escalares cursor e tabela não podem ser especificados como um tipo de dados de parâmetro em funções Transact-SQL ou CLR.
Se type_schema_name não for especificado, o Mecanismo de Banco de Dados do SQL Server procurará o parameter_data_type na seguinte ordem:
O esquema que contém os nomes dos tipos de dados do sistema SQL Server.
O esquema padrão do usuário atual no banco de dados atual.
O esquema
dbono banco de dados atual.
[ = padrão ] **
Um valor padrão para o parâmetro. Se um valor padrão for definido, a função pode ser executada sem especificar um valor para esse parâmetro.
Note
Os valores de parâmetros padrão podem ser especificados para funções CLR, exceto para os tipos de dados varchar(max) e varbinary(max).
Quando um parâmetro da função tem um valor padrão, a palavra-chave DEFAULT deve ser especificada ao chamar a função para recuperar o valor padrão. Esse comportamento é diferente do uso de parâmetros com valores padrão em procedimentos armazenados em que omitir o parâmetro também implica o valor padrão.
return_data_type
O valor de retorno de uma função escalar definida pelo usuário. Para funções Transact-SQL, todos os tipos de dados, incluindo tipos CLR definidos pelo usuário, são permitidos, exceto o tipo de dados de carimbo de data/hora . Para funções CLR, todos os tipos de dados, incluindo tipos definidos pelo usuário CLR, são permitidos, exceto texto, ntext, imagem e tipos de dados de carimbo de data/hora . Os tipos não escalares cursor e tabela não podem ser especificados como um tipo de dados de retorno em funções Transact-SQL ou CLR.
function_body
Especifica que uma série de instruções Transact-SQL, que juntas não produzem um efeito colateral, como modificar uma tabela, definem o valor da função. function_body é usado apenas em funções escalares e funções com valor de tabela de várias instruções.
Em funções escalares, function_body é uma série de Transact-SQL instruções que, juntas, avaliam até um valor escalar.
Em funções com valor de tabela com várias instruções, function_body é uma série de instruções Transact-SQL que preenchem uma variável de retorno TABLE.
scalar_expression
Especifica que a função escalar retorna um valor escalar.
TABLE
Especifica que o valor de retorno da função com valor de tabela é uma tabela. Somente constantes e @local_variables podem ser passadas para funções com valor de tabela.
Em funções com valor de tabela embutido, o valor de retorno TABLE é definido por meio de uma única instrução SELECT. As funções embutidas não têm variáveis de retorno associadas.
Em funções com valor de tabela de várias instruções, @return_variable é uma variável TABLE usada para armazenar e acumular as linhas que devem ser retornadas como o valor da função. @ return_variable pode ser especificado apenas para funções Transact-SQL e não para funções CLR.
select-stmt
A única instrução SELECT que define o valor de retorno de uma função com valor de tabela embutido.
NOME EXTERNO <method_specifier>assembly_name.class_name.method_name
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores.
Especifica o método de um assembly para vincular com a função. assembly_name deve corresponder a um assembly existente no SQL Server no banco de dados atual com visibilidade ativada. 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 namespace que use um ponto (.) para separar partes de namespace, o nome da classe deverá ser delimitado usando colchetes ([]) ou aspas (""). method_name deve ser um identificador válido do SQL Server e deve existir como um método estático na classe especificada.
Note
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 fazem referência a módulos de Common Language Runtime; no entanto, você não pode executar essas referências no SQL Server até habilitar a opção clr enabled. Para ativar a opção, use sp_configure.
Note
Esta opção não está disponível em um banco de dados contido.
< table_type_definition>( { column_definition <><column_constraint | ><> computed_column_definition } [ <table_constraint> ] [ ,... n ] )
Define o tipo de dados da tabela para uma função Transact-SQL. A declaração de tabela inclui definições de coluna e restrições de coluna ou tabela.
< > clr_table_type_definition ( { column_namedata_type } [ ,... n ] )
Aplica-se a: SQL Server 2008 (10.0.x) e posterior, Banco de dados SQL (visualização em algumas regiões).
Define os tipos de dados de tabela para uma função CLR. A declaração de tabela inclui apenas nomes de colunas e tipos de dados.
NULL|NÃO NULO
Suportado apenas para funções escalares definidas pelo usuário compiladas nativamente. Para obter mais informações, consulte Funções User-Defined escalares para In-Memory OLTP.
NATIVE_COMPILATION
Indica se uma função definida pelo usuário é compilada nativamente. Esse argumento é necessário para funções escalares definidas pelo usuário compiladas nativamente.
O argumento NATIVE_COMPILATION é necessário quando você ALTER a função, e só pode ser usado, se a função foi criada com o argumento NATIVE_COMPILATION.
COMECE ATÔMICO COM
Suportado apenas para funções escalares definidas pelo usuário compiladas nativamente e é necessário. Para obter mais informações, consulte Atomic Blocks in Native Procedures.
SCHEMABINDING
O argumento SCHEMABINDING é necessário para funções escalares definidas pelo usuário compiladas nativamente.
<function_option>::= e <clr_function_option>::=
Especifica que a função terá uma ou mais das seguintes opções.
ENCRYPTION
Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores.
Indica que o Mecanismo de Banco de Dados criptografa as colunas de exibição de catálogo que contêm o texto da ALTER FUNCTION instrução. O uso de ENCRYPTION impede que a função seja publicada como parte da replicação do SQL Server. ENCRYPTION não pode ser especificado para funções CLR.
SCHEMABINDING
Especifica que a função está vinculada aos objetos de banco de dados aos quais faz referência. Quando SCHEMABINDING é especificado, os objetos base não podem ser modificados de uma forma que afetaria a definição da função. A própria definição de função deve primeiro ser modificada ou descartada para remover dependências no objeto a ser modificado.
A associação da função aos objetos aos quais ela faz referência é removida somente quando ocorre uma das seguintes ações:
A função é descartada.
A função é modificada usando a instrução ALTER com a opção SCHEMABINDING não especificada.
Para obter uma lista de condições que devem ser atendidas antes que uma função possa ser vinculada ao esquema, consulte CREATE FUNCTION (Transact-SQL).
DEVOLVE NULL NA ENTRADA NULA | CHAMADA NA ENTRADA NULA
Especifica o OnNULLCall atributo de uma função com valor escalar. Se não for especificado, CALLED ON NULL INPUT está implícito por padrão. Isso significa que o corpo da função é executado mesmo se NULL for passado como um argumento.
Se RETURNS NULL ON NULL INPUT for especificado em uma função CLR, isso indica que o SQL Server pode retornar NULL quando qualquer um dos argumentos que recebe é NULL, sem realmente invocar o corpo da função. Se o método especificado em <method_specifier> já tiver um atributo personalizado que indica RETURNS NULL ON NULL INPUT, mas a ALTER FUNCTION instrução indica CALLED ON NULL INPUT, a ALTER FUNCTION instrução terá precedência. O OnNULLCall atributo não pode ser especificado para funções com valor de tabela CLR.
Cláusula EXECUTE AS
Especifica o contexto de segurança sob o qual a função definida pelo usuário é executada. Portanto, você pode controlar qual conta de usuário o SQL Server usa para validar permissões em quaisquer objetos de banco de dados referenciados pela função.
Note
EXECUTE AS não pode ser especificado para funções inline definidas pelo usuário.
Para obter mais informações, consulte Cláusula EXECUTE AS (Transact-SQL).
< >column_definition ::=
Define o tipo de dados da tabela. A declaração da tabela inclui definições e restrições de coluna. Para funções CLR, apenas column_name e data_type podem ser especificados.
column_name
O nome de uma coluna na tabela. Os nomes das colunas devem estar em conformidade com as regras para identificadores e devem ser exclusivos na tabela. column_name pode consistir de 1 a 128 caracteres.
data_type
Especifica o tipo de dados da coluna. Para funções Transact-SQL, todos os tipos de dados, incluindo tipos CLR definidos pelo usuário, são permitidos, exceto carimbo de data/hora. Para funções CLR, todos os tipos de dados, incluindo tipos CLR definidos pelo usuário, são permitidos, exceto texto, ntext, image, char, varchar, varchar(max) e carimbo de data/hora. O cursor de tipo não escalar não pode ser especificado como um tipo de dados de coluna em funções Transact-SQL ou CLR.
PADRÃO constant_expression
Especifica o valor fornecido para a coluna quando um valor não é fornecido explicitamente durante uma inserção.
constant_expression é uma constante, NULLou um valor de função do sistema. As definições DEFAULT podem ser aplicadas a qualquer coluna, exceto aquelas que têm a propriedade IDENTITY. DEFAULT não pode ser especificado para funções com valor de tabela CLR.
COLLATE collation_name
Especifica o agrupamento para a coluna. Se não for especificado, será atribuído à coluna o agrupamento padrão do banco de dados. O nome do agrupamento pode ser um nome de agrupamento do Windows ou um nome de agrupamento SQL. Para obter uma lista e mais informações, consulte Nome de agrupamento do Windows e Nome de agrupamento do SQL Server.
A cláusula COLLATE pode ser usada para alterar os agrupamentos somente de colunas dos tipos de dados char, varchar, nchar e nvarchar .
COLLATE não pode ser especificado para funções com valor de tabela CLR.
ROWGUIDCOL
Indica que a nova coluna é uma coluna de identificador global exclusivo de linha. Apenas uma coluna uniqueidentifier por tabela pode ser designada como coluna ROWGUIDCOL . A propriedade ROWGUIDCOL pode ser atribuída somente a uma coluna uniqueidentifier .
A propriedade ROWGUIDCOL não impõe a exclusividade dos valores armazenados na coluna. Também não gera automaticamente valores para novas linhas inseridas na tabela. Para gerar valores exclusivos para cada coluna, use a NEWID função em INSERT instruções. Um valor padrão pode ser especificado; no entanto, NEWID não pode ser especificado como padrão.
IDENTITY
Indica que a nova coluna é uma coluna de identidade. Quando uma nova linha é adicionada à tabela, o SQL Server fornece um valor incremental exclusivo para a coluna. As colunas de identidade são normalmente usadas em conjunto com restrições de CHAVE PRIMÁRIA para servir como identificador de linha exclusivo para a tabela. A propriedade IDENTITY pode ser atribuída a colunas tinyint, smallint, int, bigint, decimal(p,0) ou numérica(p,0 ). Apenas uma coluna de identidade pode ser criada por tabela. Os padrões vinculados e as restrições DEFAULT não podem ser usados com uma coluna de identidade. Você deve especificar a semente e o incremento ou nenhum. Se nenhum dos dois for especificado, o padrão será (1,1).
IDENTITY não pode ser especificado para funções com valor de tabela CLR.
seed
O valor inteiro a ser atribuído à primeira linha da tabela.
increment
O valor inteiro a ser adicionado ao valor de semente para linhas sucessivas na tabela.
< >column_constraint ::= e < table_constraint>::=
Define a restrição para uma coluna ou tabela especificada. Para funções CLR, o único tipo de restrição permitido é NULL. Restrições nomeadas não são permitidas.
NULO | NÃO NULO
Determina se valores nulos são permitidos na coluna.
NULL não é estritamente uma restrição, mas pode ser especificado como NOT NULL.
NOT NULL não pode ser especificado para funções com valor de tabela CLR.
CHAVE PRIMÁRIA
Uma restrição que impõe a integridade da entidade para uma coluna especificada por meio de um índice exclusivo. Em funções definidas pelo usuário com valor de tabela, a restrição CHAVE PRIMÁRIA pode ser criada em apenas uma coluna por tabela. CHAVE PRIMÁRIA não pode ser especificada para funções com valor de tabela CLR.
UNIQUE
Uma restrição que fornece integridade de entidade para uma coluna ou colunas especificadas por meio de um índice exclusivo. Uma tabela pode ter várias restrições EXCLUSIVAS. UNIQUE não pode ser especificado para funções com valor de tabela CLR.
AGRUPADOS | NÃO AGRUPADO
Indique que um índice clusterizado ou não clusterizado é criado para a restrição PRIMARY KEY ou UNIQUE. As restrições de CHAVE PRIMÁRIA usam CLUSTERED e as restrições UNIQUE usam NONCLUSTERED.
CLUSTERED pode ser especificado para apenas uma restrição. Se CLUSTERED for especificado para uma restrição UNIQUE e uma restrição PRIMARY KEY também for especificada, a PRIMARY KEY usará NONCLUSTERED.
CLUSTERED e NONCLUSTERED não podem ser especificados para funções com valor de tabela CLR.
CHECK
Uma restrição que impõe a integridade do domínio limitando os valores possíveis que podem ser inseridos em uma coluna ou colunas. As restrições CHECK não podem ser especificadas para funções com valor de tabela CLR.
logical_expression
Uma expressão lógica que retorna TRUE ou FALSE.
<computed_column_definition>::=
Especifica uma coluna computada. Para obter mais informações sobre colunas computadas, consulte CREATE TABLE (Transact-SQL).
column_name
O nome da coluna computada.
computed_column_expression
Uma expressão que define o valor de uma coluna calculada.
<index_option>::=
Especifica as opções de índice para o índice PRIMARY KEY ou UNIQUE. Para obter mais informações sobre opções de índice, consulte CREATE INDEX (Transact-SQL).
PAD_INDEX = { EM | DESLIGADO }
Especifica o preenchimento do índice. O padrão é OFF.
FILLFACTOR = fator de enchimento
Especifica uma porcentagem que indica o quão cheio o Mecanismo de Banco de Dados deve tornar o nível de folha de cada página de índice durante a criação ou alteração do índice. fillfactor deve ser um valor inteiro de 1 a 100. O padrão é 0.
IGNORE_DUP_KEY = { EM | DESLIGADO }
Especifica a resposta de erro quando uma operação de inserção tenta inserir valores de chave duplicados em um índice exclusivo. A opção IGNORE_DUP_KEY aplica-se apenas a operações de inserção depois que o índice é criado ou reconstruído. O padrão é OFF.
STATISTICS_NORECOMPUTE = { LIGADO | DESLIGADO }
Especifica se as estatísticas de distribuição são recalculadas. O padrão é OFF.
ALLOW_ROW_LOCKS = { EM | DESLIGADO }
Especifica se os bloqueios de linha são permitidos. O padrão é ON.
ALLOW_PAGE_LOCKS = { EM | DESLIGADO }
Especifica se os bloqueios de página são permitidos. O padrão é ON.
Remarks
ALTER FUNCTION não pode ser usado para alterar uma função com valor escalar para uma função com valor de tabela, ou vice-versa. Além disso, ALTER FUNCTION não pode ser usado para alterar uma função embutida para uma função multistatement, ou vice-versa. ALTER FUNCTION não pode ser usado para alterar uma função Transact-SQL para uma função CLR ou vice-versa.
As seguintes instruções do Service Broker não podem ser incluídas na definição de uma função Transact-SQL definida pelo usuário:
BEGIN DIALOG CONVERSATIONEND CONVERSATIONGET CONVERSATION GROUPMOVE CONVERSATIONRECEIVESEND
Permissions
Requer permissão ALTER na função ou no esquema. Se a função especificar um tipo definido pelo usuário, exigirá a permissão EXECUTE no tipo.
No Microsoft Fabric, os membros das funções de Administrador, Membro e Colaborador do espaço de trabalho Malha podem criar funções.