Conceptos básicos de las funciones definidas por el usuario

Al igual que las funciones en los lenguajes de programación, las funciones definidas por el usuario de Microsoft SQL Server son rutinas que aceptan parámetros, realizan una acción, como un cálculo complejo, y devuelven el resultado de esa acción como un valor. El valor devuelto puede ser un valor escalar único o un conjunto de resultados.

Ventajas de las funciones definidas por el usuario

Las ventajas de utilizar las funciones definidas por el usuario en SQL Server son:

  • Permiten una programación modular.

    Puede crear la función una vez, almacenarla en la base de datos y llamarla desde el programa tantas veces como desee. Las funciones definidas por el usuario se pueden modificar, independientemente del código de origen del programa.

  • Permiten una ejecución más rápida.

    Al igual que los procedimientos almacenados, las funciones definidas por el usuario Transact-SQL reducen el costo de compilación del código Transact-SQL almacenando los planes en la caché y reutilizándolos para ejecuciones repetidas. Esto significa que no es necesario volver a analizar y optimizar la función definida por el usuario con cada uso, lo que permite obtener tiempos de ejecución mucho más rápidos.

    Las funciones CLR ofrecen una ventaja de rendimiento importante sobre las funciones Transact-SQL para tareas de cálculo, manipulación de cadenas y lógica empresarial. Las funciones Transact-SQL se adecuan mejor a la lógica intensiva del acceso a datos.

  • Pueden reducir el tráfico de red.

    Una operación que filtra datos basándose en restricciones complejas que no se puede expresar en una sola expresión escalar se puede expresar como una función. La función se puede invocar en la cláusula WHERE para reducir el número de filas que se envían al cliente.

Nota

Las funciones definidas por el usuario de Transact-SQL en consultas solo se pueden ejecutar en un único subproceso (plan de ejecución en serie).

Componentes de una función definida por el usuario

Las funciones definidas por el usuario se pueden escribir en Transact-SQL, o en cualquier lenguaje de programación .NET. Para obtener más información acerca del uso de lenguajes .NET en funciones, vea Funciones CLR definidas por el usuario.

Todas las funciones definidas por el usuario tienen la misma estructura de dos partes: un encabezado y un cuerpo. La función toma cero o más parámetros de entrada y devuelve un valor escalar o una tabla.

El encabezado define:

  • Nombre de función con nombre de propietario o esquema opcional

  • Nombre del parámetro de entrada y tipo de datos

  • Opciones aplicables al parámetro de entrada

  • Tipo de datos de parámetro devueltos y nombre opcional

  • Opciones aplicables al parámetro devuelto

El cuerpo define la acción o la lógica que la función va a realizar. Contiene:

  • Una o más instrucciones Transact-SQL que ejecutan la lógica de la función

  • Una referencia a un ensamblado .NET

En el siguiente ejemplo se muestra una función Transact-SQL simple definida por el usuario y se identifican los principales componentes de la función. La función evalúa una fecha proporcionada y devuelve un valor que designa la posición de esa fecha en una semana.

IF OBJECT_ID(N'dbo.GetWeekDay', N'FN') IS NOT NULL
    DROP FUNCTION dbo.GetWeekDay;
GO
CREATE FUNCTION dbo.GetWeekDay           -- function name
(@Date datetime)                     -- input parameter name and data type
RETURNS int                          -- return parameter data type
AS
BEGIN                                -- begin body definition
RETURN DATEPART (weekday, @Date)     -- action performed
END;
GO

En el siguiente ejemplo se muestra la función que se utiliza en una instrucción Transact-SQL.

SELECT dbo.GetWeekDay(CONVERT(DATETIME,'20020201',101)) AS DayOfWeek;
GO

El conjunto de resultados es el siguiente.

DayOfWeek
---------
6  
(1 row(s) affected)