Partilhar via


Modificar funções definidas pelo usuário

Você pode modificar funções definidas pelo usuário no SQL Server 2012 usando o SQL Server Management Studio ou Transact-SQL. Modificar funções definidas pelo usuário como descrito abaixo não alterará as permissões das funções, nem afetará as funções dependentes, procedimentos armazenados ou gatilhos.

Neste tópico

  • Antes de começar:

    Limitações e restrições

    Segurança

  • Para modificar uma função definida pelo usuário, usando:

    SQL Server Management Studio

    Transact-SQL

Antes de começar

Limitações e restrições

ALTER FUNCTION não pode ser usado para executar nenhuma das ações a seguir:

  • Alterar uma função de valor escalar para uma função com valor de tabela ou vice-versa.

  • Alterar uma função embutida para uma função com várias instruções, ou vice-versa.

  • Alterar uma função de Transact-SQL para uma função CLR função, ou vice-versa.

Segurança

Permissões

Requer permissão ALTER na função ou no esquema. Se a função especificar um tipo definido pelo usuário, a permissão EXECUTE será exigida no tipo.

Ícone de seta usado com o link Voltar ao Início[Top]

Usando o SQL Server Management Studio

Para modificar uma função definida pelo usuário

  1. Clique no sinal de mais ao lado do banco de dados que contém a função que você deseja modificar.

  2. Clique no sinal de mais ao lado da pasta Programação.

  3. Clique no sinal de mais ao lado da pasta que contém a função que você deseja modificar:

    • Função com valor de tabela

    • Função de valor escalar

    • Função de agregação

  4. Clique com o botão direito do mouse na função a ser modificada e selecione Modificar.

  5. Na Janela de Consulta, faça as alterações necessárias à instrução ALTER FUNCTION.

  6. No menu Arquivo, clique em Salvar function_name.

Ícone de seta usado com o link Voltar ao Início[Top]

Usando Transact-SQL

Para modificar uma função definida pelo usuário

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados.

  2. Na barra Padrão, clique em Nova Consulta.

  3. Copie e cole o exemplo a seguir na janela de consulta e clique em Executar.

    -- Scalar-Valued Function
    USE [AdventureWorks2012]
    GO
    ALTER FUNCTION [dbo].[ufnGetAccountingEndDate]()
    RETURNS [datetime] 
    AS 
    BEGIN
        RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112));
    END;
    
    -- Table-Valued Function 
    USE [AdventureWorks2012]
    GO
    ALTER FUNCTION [dbo].[ufnGetContactInformation](@PersonID int)
    RETURNS @retContactInformation TABLE 
    (
        -- Columns returned by the function
        [PersonID] int NOT NULL, 
        [FirstName] [nvarchar](50) NULL, 
        [LastName] [nvarchar](50) NULL, 
        [JobTitle] [nvarchar](50) NULL,
        [BusinessEntityType] [nvarchar](50) NULL
    )
    AS 
    -- Returns the first name, last name, job title and business entity type for the specified contact.
    -- Since a contact can serve multiple roles, more than one row may be returned.
    BEGIN
    IF @PersonID IS NOT NULL 
    BEGIN
         IF EXISTS(SELECT * FROM [HumanResources].[Employee] e 
         WHERE e.[BusinessEntityID] = @PersonID) 
         INSERT INTO @retContactInformation
              SELECT @PersonID, p.FirstName, p.LastName, e.[JobTitle], 'Employee'
              FROM [HumanResources].[Employee] AS e
              INNER JOIN [Person].[Person] p ON p.[BusinessEntityID] = e.[BusinessEntityID]
              WHERE e.[BusinessEntityID] = @PersonID;
    
         IF EXISTS(SELECT * FROM [Purchasing].[Vendor] AS v
         INNER JOIN [Person].[BusinessEntityContact] bec ON bec.[BusinessEntityID] = v.[BusinessEntityID]
         WHERE bec.[PersonID] = @PersonID)
         INSERT INTO @retContactInformation
              SELECT @PersonID, p.FirstName, p.LastName, ct.[Name], 'Vendor Contact' 
              FROM [Purchasing].[Vendor] AS v
              INNER JOIN [Person].[BusinessEntityContact] bec ON bec.[BusinessEntityID] = v.[BusinessEntityID]
              INNER JOIN [Person].ContactType ct ON ct.[ContactTypeID] = bec.[ContactTypeID]
              INNER JOIN [Person].[Person] p ON p.[BusinessEntityID] = bec.[PersonID]
              WHERE bec.[PersonID] = @PersonID;
    
         IF EXISTS(SELECT * FROM [Sales].[Store] AS s
         INNER JOIN [Person].[BusinessEntityContact] bec ON bec.[BusinessEntityID] = s.[BusinessEntityID]
         WHERE bec.[PersonID] = @PersonID)
         INSERT INTO @retContactInformation
              SELECT @PersonID, p.FirstName, p.LastName, ct.[Name], 'Store Contact' 
              FROM [Sales].[Store] AS s
              INNER JOIN [Person].[BusinessEntityContact] bec ON bec.[BusinessEntityID] = s.[BusinessEntityID]
              INNER JOIN [Person].ContactType ct ON ct.[ContactTypeID] = bec.[ContactTypeID]
              INNER JOIN [Person].[Person] p ON p.[BusinessEntityID] = bec.[PersonID]
              WHERE bec.[PersonID] = @PersonID;
    
         IF EXISTS(SELECT * FROM [Person].[Person] AS p
         INNER JOIN [Sales].[Customer] AS c ON c.[PersonID] = p.[BusinessEntityID]
         WHERE p.[BusinessEntityID] = @PersonID AND c.[StoreID] IS NULL) 
         INSERT INTO @retContactInformation
              SELECT @PersonID, p.FirstName, p.LastName, NULL, 'Consumer' 
              FROM [Person].[Person] AS p
              INNER JOIN [Sales].[Customer] AS c ON c.[PersonID] = p.[BusinessEntityID]
              WHERE p.[BusinessEntityID] = @PersonID AND c.[StoreID] IS NULL; 
         END
    RETURN;
    END;
    

Para obter mais informações, consulte ALTER FUNCTION (Transact-SQL).

Ícone de seta usado com o link Voltar ao Início[Top]