Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Uživatelem definované funkce v SQL Serveru můžete upravit pomocí aplikace SQL Server Management Studio nebo jazyka Transact-SQL. Úprava uživatelem definovaných funkcí, jak je popsáno níže, nezmění oprávnění funkcí ani nebude mít vliv na závislé funkce, uložené procedury ani triggery.
Omezení a restrikce
FUNKCI ALTER FUNCTION nelze použít k provedení žádné z následujících akcí:
Změňte skalární funkci na funkci s hodnotou tabulky nebo naopak.
Změňte inline funkci na funkci s více příkazy nebo naopak.
Změňte funkci Transact-SQL na funkci CLR nebo naopak.
Dovolení
Vyžaduje oprávnění ALTER pro funkci nebo ve schématu. Pokud funkce určuje uživatelem definovaný typ, vyžaduje oprávnění EXECUTE u typu.
Použití aplikace SQL Server Management Studio
Vyberte znaménko plus vedle databáze obsahující funkci, kterou chcete upravit.
Vyberte znaménko plus vedle složky Programovatelnost.
Vyberte znaménko plus vedle složky, která obsahuje funkci, kterou chcete upravit:
Tabulková funkce
Skalární funkce
Agregační funkce
Klikněte pravým tlačítkem myši na funkci, kterou chcete upravit, a vyberte Upravit.
V okně dotazu proveďte potřebné změny příkazu ALTER FUNCTION.
V nabídce Soubor vyberte Uložitfunction_name.
Použití Transact-SQL
V Průzkumníku objektůpřipojte se k instanci modulu databáze.
Na panelu Standard vyberte Nový dotaz.
Zkopírujte a vložte následující příklady do okna dotazu a vyberte Spustit.
Následující ukázka kódu změní skalární hodnotu funkce.
-- Scalar-Valued Function USE [AdventureWorks2022] GO ALTER FUNCTION [dbo].[ufnGetAccountingEndDate]() RETURNS [datetime] AS BEGIN RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112)); END;Následující vzorový kód změní funkci s hodnotou tabulky.
-- 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;