Modificare funzioni definite dall'utenteModify User-defined Functions

È possibile modificare le funzioni definite dall'utente in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.You can modify user-defined functions in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. La modifica delle funzioni definite dall'utente come descritto di seguito non comporta la modifica delle autorizzazioni delle funzioni, né influisce su funzioni dipendenti, stored procedure o trigger.Modifying user-defined functions as described below will not change the functions’ permissions, nor will it affect any dependent functions, stored procedures, or triggers.

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

Non è possibile utilizzare ALTER FUNCTION per eseguire le azioni seguenti:ALTER FUNCTION cannot be used to perform any of the following actions:

  • Modificare una funzione a valori scalari in una funzione con valori di tabella o viceversa.Change a scalar-valued function to a table-valued function, or vice versa.

  • Modificare una funzione inline in una funzione a più istruzioni o viceversa.Change an inline function to a multistatement function, or vice versa.

  • Modificare una funzione Transact-SQL in una funzione CLR o viceversa.Change a Transact-SQL function to a CLR function, or vice-versa.

Sicurezza Security

Autorizzazioni Permissions

È necessario disporre dell'autorizzazione ALTER per la funzione o lo schema.Requires ALTER permission on the function or on the schema. Se per la funzione viene specificato un tipo definito dall'utente, è necessario disporre dell'autorizzazione EXECUTE per tale tipo.If the function specifies a user-defined type, requires EXECUTE permission on the type.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Per modificare una funzione definita dall'utenteTo modify a user-defined function

  1. Fare clic sul segno più accanto al database che contiene la funzione che si desidera modificare.Click on the plus sign next to the database that contains the function you wish to modify.

  2. Fare clic sul segno più accanto alla cartella Programmabilità .Click on the plus sign next to the Programmability folder.

  3. Fare clic sul segno più accanto alla cartella che contiene la funzione che si desidera modificare:Click the plus sign next to the folder that contains the function you wish to modify:

    • Table-valued FunctionTable-valued Function

    • Funzione a valori scalariScalar-valued Function

    • Funzione di aggregazioneAggregate Function

  4. Fare clic con il pulsante destro del mouse sulla funzione da modificare, quindi scegliere Modifica.Right-click the function you want to modify and select Modify.

  5. Nella Finestra Query apportare le modifiche necessarie all'istruzione ALTER FUNCTION.In the Query Window, make the necessary changes to the ALTER FUNCTION statement.

  6. Dal menu File scegliere Salvanome_funzione.On the File menu, click Savefunction_name.

Utilizzo di Transact-SQL Using Transact-SQL

Per modificare una funzione definita dall'utenteTo modify a user-defined function

  1. In Esplora oggetticonnettersi a un'istanza del Motore di databaseDatabase Engine.In Object Explorer, connect to an instance of Motore di databaseDatabase Engine.

  2. Sulla barra Standard fare clic su Nuova query.On the Standard bar, click New Query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.Copy and paste the following example into the query window and click Execute.

    -- 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;  
    

    Per altre informazioni, vedere ALTER FUNCTION (Transact-SQL).For more information, see ALTER FUNCTION (Transact-SQL).