Ejecutar funciones definidas por el usuario

Se aplica a:SQL ServerAzure SQL Database

Ejecutar una función definida por el usuario mediante Transact-SQL.

Las funciones escalares deben invocarse como mínimo con el nombre de dos partes de la función (<schema>.<function>). Para obtener más información, vea CREATE FUNCTION (Transact-SQL).

Limitaciones

En Transact-SQL, los parámetros se pueden proporcionar mediante <value> o @parameter_name = <value>. Un parámetro no forma parte de una transacción. Por tanto, si se cambia un parámetro en una transacción que se revierte posteriormente, el valor del parámetro no vuelve a su valor anterior. El valor devuelto al procedimiento llamante es siempre el valor del parámetro en el momento en que finaliza el módulo llamado.

Permisos

Los permisos no son necesarios para ejecutar la instrucción EXECUTE. Pero se requieren permisos para los elementos protegibles a los que se hace referencia en la cadena EXECUTE. Por ejemplo, si la cadena contiene una instrucción INSERT, el autor de llamada de la instrucción EXECUTE debe tener el permiso INSERT en la tabla de destino. Los permisos se comprueban cuando se encuentra la instrucción EXECUTE, incluso si la instrucción EXECUTE está incluida en un módulo. Para obtener más información, vea EXECUTE.

Uso de Transact-SQL

En este ejemplo se usa la función escalar ufnGetSalesOrderStatusText que está disponible en la mayoría de las ediciones de AdventureWorks2022. El propósito de la función es devolver un valor de texto para el estado de las ventas de un entero dado. Para variar el ejemplo, pase los enteros del 1 al 7 al parámetro @Status.

USE [AdventureWorks2022]
GO

-- Declare a variable to return the results of the function.
DECLARE @ret NVARCHAR(15);

-- Execute the function while passing a value to the @status parameter
EXEC @ret = dbo.ufnGetSalesOrderStatusText @Status = 5;

-- View the returned value.
-- The Execute and Select statements must be executed at the same time.
SELECT N'Order Status: ' + @ret;

Este es el resultado.

Order Status: Shipped