Megosztás a következőn keresztül:


Felhasználó által definiált függvények módosítása

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Felügyelt Példány

A felhasználó által definiált függvényeket az SQL Server Management Studióval vagy a Transact-SQL-lel módosíthatja. A felhasználó által definiált függvények alább ismertetett módosítása nem módosítja a függvények engedélyeit, és nem befolyásolja a függő függvényeket, a tárolt eljárásokat és az eseményindítókat.

Korlátozások és korlátozások

Az ALTER FÜGGVÉNY nem használható a következő műveletek végrehajtására:

  • Skaláris értékű függvény módosítása táblaértékű függvényre, vagy fordítva.

  • Beágyazott függvény módosítása többértékű függvényre, vagy fordítva.

  • Módosítsa a Transact-SQL függvényt CLR-függvényre, vagy fordítva.

Engedélyek

Alter engedély szükséges a függvényhez vagy a sémához. Ha a függvény felhasználó által definiált típust ad meg, a típushoz VÉGREHAJTÁSI engedély szükséges.

Az SQL Server Management Studio használata

  1. Válassza ki a módosítani kívánt függvényt tartalmazó adatbázis melletti pluszjelet.

  2. Válassza a Programozhatóság mappa melletti pluszjelet.

  3. Válassza ki a módosítani kívánt függvényt tartalmazó mappa melletti pluszjelet:

    • Táblaértékű függvény

    • Skaláris értékű függvény

    • Összesítő függvény

  4. Kattintson a jobb gombbal a módosítani kívánt függvényre, és válassza a módosítása lehetőséget.

  5. A lekérdezési ablakban végezze el a szükséges módosításokat az ALTER FÜGGVÉNY utasításban.

  6. A Fájl menüben válassza a Mentésfunction_namelehetőséget.

Transact-SQL használata

  1. Az Object Explorer-ben csatlakozzon az adatbázismotor egy példányához.

  2. A Standard sávon válassza Új lekérdezéslehetőséget.

  3. Másolja és illessze be a következő példákat a lekérdezési ablakba, és válassza a Végrehajtáslehetőséget.

    Az alábbi kódminta egy skaláris értékű függvényt módosít.

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

    Az alábbi kódminta egy táblaértékű függvényt módosít.

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

Lásd még: