Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Funkcje zdefiniowane przez użytkownika można modyfikować w programie SQL Server przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL. Modyfikowanie funkcji zdefiniowanych przez użytkownika zgodnie z poniższym opisem nie spowoduje zmiany uprawnień funkcji ani nie wpłynie na żadne funkcje zależne, procedury składowane lub wyzwalacze.
Ograniczenia i ograniczenia
Funkcji ALTER nie można używać do wykonywania dowolnej z następujących akcji:
Zmień funkcję o wartości skalarnej na funkcję wartości tabeli lub odwrotnie.
Zmień funkcję śródwierszową na funkcję wielostanową lub odwrotnie.
Zmień funkcję Transact-SQL na funkcję CLR lub odwrotnie.
Uprawnienia
Wymaga uprawnienia ALTER dla funkcji lub schematu. Jeśli funkcja określa typ zdefiniowany przez użytkownika, wymaga uprawnienia EXECUTE dla typu.
Korzystanie z programu SQL Server Management Studio
Wybierz znak plus obok bazy danych zawierającej funkcję, którą chcesz zmodyfikować.
Wybierz symbol plusa obok folderu Programmability.
Wybierz znak plus obok folderu zawierającego funkcję, którą chcesz zmodyfikować:
Funkcja wartości tabeli
Funkcja skalarna
Funkcja agregacji
Kliknij prawym przyciskiem myszy funkcję, którą chcesz zmodyfikować, i wybierz pozycję Modyfikuj.
W oknie Zapytania wprowadź niezbędne zmiany w instrukcji ALTER FUNCTION.
W menu Plik wybierz pozycję Zapiszfunction_name.
Korzystanie z Transact-SQL
W Eksploratorze obiektów nawiąż połączenie z wystąpieniem Silnika bazy danych.
Na pasku standardowym wybierz pozycję Nowe zapytanie.
Skopiuj i wklej następujące przykłady w oknie zapytania, a następnie wybierz opcję Wykonaj.
Poniższy przykładowy kod zmienia funkcję skalarną.
-- Scalar-Valued Function USE [AdventureWorks2022] GO ALTER FUNCTION [dbo].[ufnGetAccountingEndDate]() RETURNS [datetime] AS BEGIN RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112)); END;Poniższy przykładowy kod zmienia funkcję wartości tabeli.
-- 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;