Modificar funciones definidas por el usuario
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
Puede modificar las funciones definidas por el usuario en SQL Server mediante SQL Server Management Studio o Transact-SQL. La modificación de funciones definidas por el usuario como se describe a continuación no cambiará los permisos de las funciones, ni afectará a las funciones dependientes, los procedimientos almacenados ni los desencadenadores.
Limitaciones y restricciones
ALTER FUNCTION no se puede usar para realizar ninguna de las siguientes acciones:
Cambiar una función escalar a una función con valores de tabla, o viceversa.
Cambiar una función insertada a una función de múltiples instrucciones, o viceversa.
Cambiar una función de Transact-SQL en una función CLR, o viceversa.
Permisos
Requiere el permiso ALTER para la función o para el esquema. Si la función especifica un tipo definido por el usuario, requiere el permiso EXECUTE para ese tipo.
Uso de SQL Server Management Studio
Seleccione el signo más junto a la base de datos que contiene la función que desea modificar.
Seleccione el signo más junto a la carpeta Programabilidad.
Seleccione el signo más junto a la carpeta que contiene la función que desea modificar:
Table-valued Function
Función con valor escalar
Función de agregado
Haga clic con el botón derecho en la función que quiere modificar y seleccione Modificar.
En la ventana de consulta, realice los cambios necesarios en la instrucción ALTER FUNCTION.
En el menú Archivo, seleccione Guardarfunction_name.
Uso de Transact-SQL
En Explorador de objetos, conéctese a una instancia del motor de base de datos.
En la barra Estándar, seleccione Nueva consulta.
Copie y pegue los ejemplos siguientes en la ventana de consulta y seleccione Ejecutar.
En el ejemplo de código siguiente se modifica una función escalar con valores.
-- Scalar-Valued Function USE [AdventureWorks2022] GO ALTER FUNCTION [dbo].[ufnGetAccountingEndDate]() RETURNS [datetime] AS BEGIN RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112)); END;
En el ejemplo de código siguiente se modifica una función con valores de tabla.
-- 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;