Dela via


Ändra användardefinierade funktioner

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Du kan ändra användardefinierade funktioner i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL. Om du ändrar användardefinierade funktioner enligt beskrivningen nedan ändras inte funktionernas behörigheter och påverkar inte heller beroende funktioner, lagrade procedurer eller utlösare.

Begränsningar och restriktioner

ALTER FUNCTION kan inte användas för att utföra någon av följande åtgärder:

  • Ändra en skalärvärdesfunktion till en tabellvärdesfunktion eller vice versa.

  • Ändra en infogad funktion till en multistatement-funktion eller vice versa.

  • Ändra en Transact-SQL-funktion till en CLR-funktion eller tvärtom.

Behörigheter

Kräver ALTER-behörighet för funktionen eller i schemat. Om funktionen anger en användardefinierad typ kräver körbehörighet för typen.

Använda SQL Server Management Studio

  1. Välj plustecknet bredvid databasen som innehåller den funktion som du vill ändra.

  2. Välj plustecknet bredvid mappen Programmability.

  3. Välj plustecknet bredvid mappen som innehåller den funktion som du vill ändra:

    • Tabellvärdesfunktion

    • Skalärvärderad funktion

    • Aggregeringsfunktion

  4. Högerklicka på den funktion som du vill ändra och välj Ändra.

  5. I frågefönstret gör du nödvändiga ändringar i ALTER FUNCTION-instruktionen.

  6. På menyn Arkiv väljer du Sparafunction_name.

Använd Transact-SQL

  1. I Object Exploreransluter du till en instans av databasmotorn.

  2. I standardfältet väljer du Ny fråga.

  3. Kopiera och klistra in följande exempel i frågefönstret och välj Kör.

    Följande kodexempel ändrar en skalärvärdesfunktion.

    -- Scalar-Valued Function
    USE [AdventureWorks2022]
    GO
    ALTER FUNCTION [dbo].[ufnGetAccountingEndDate]()
    RETURNS [datetime]
    AS
    BEGIN
        RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112));
    END;
    

    Följande kodexempel ändrar en tabellvärdesfunktion.

    -- Table-Valued Function
    USE [AdventureWorks2022]
    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;
    

Se även