SQL Server se entrega con una colección de funciones integradas que le permiten realizar una variedad de operaciones. Cada función integrada tiene un propósito específico y no se puede modificar. Si una función sirve para su propósito, puede seguir adelante y usarla.
Pero, ¿qué pasa si no puede encontrar una función que sirva para su propósito?
Entonces es hora de escribir su propia función definida por el usuario.
¿Qué es una función definida por el usuario?
Una función definida por el usuario (UDF) es una rutina que puede tomar parámetros, realizar cálculos u otras acciones y devolver un resultado. Y como sugiere el nombre, es definido y creado por el usuario. En este caso, el "usuario" es el programador de SQL, DBA o quien haya escrito la función.
El término función definida por el usuario lo distingue de las funciones integradas que se envían con SQL Server.
Puede especificar si la UDF aceptará o no algún parámetro y, de ser así, sus nombres, tipos de datos, etc. Por ejemplo, podría escribir una UDF que acepte un ID de producto como argumento. La función puede usar eso en su cálculo. Esto significa que la salida de la función dependerá de la entrada que se le suministre cuando se invoque.
Una vez que se ha creado una UDF, se puede invocar.
Invocación de una función definida por el usuario
El código dentro de la función no se ejecuta cuando se crea la función. Solo se ejecuta cuando la función es invocada .
"Invocar" una función a veces se denomina "llamar" a una función. Aquí es cuando obtienes la función para hacer lo que fue hecha para hacer. Básicamente, creas una función, y luego simplemente se sienta allí esperando ser invocada.
Puede invocar una UDF desde su código T-SQL, tal como llamaría a una función del sistema. Por ejemplo, podría usar un UDF en un WHERE
cláusula para restringir los resultados de un SELECT
declaración. También podría usarlo en la lista de columnas para devolver.
Las UDF también se pueden usar en columnas calculadas. Esto puede ser útil si alguna vez necesita una columna calculada para acceder a los datos de otra columna.
Parámetros
Una función definida por el usuario puede aceptar hasta 1024 parámetros de entrada. Sin embargo, también puede definir una función sin ningún parámetro si es necesario.
Un ejemplo de una función incorporada sin ningún parámetro es GETDATE()
. Esta función simplemente devuelve la marca de tiempo del sistema de base de datos actual. No es necesario pasar ningún parámetro para obtener eso.
Un ejemplo de una función definida por el usuario con un solo parámetro podría ser una que devuelva los detalles de contacto de un cliente en función de la identificación del cliente. Cuando llama a la función, pasa la ID del cliente a la función como parámetro. Luego, la función puede buscar los detalles del cliente y devolverlos en la variable de devolución. Si pasa la identificación de un cliente diferente, la función devolverá los detalles de ese cliente.
Beneficios de las funciones definidas por el usuario
Algunos de los principales beneficios de las UDF incluyen los siguientes.
- Programación modular
- Los UDF le permiten escribir código una vez y luego llamarlo tantas veces como sea necesario. No es necesario volver a escribir el mismo código cada vez que necesite hacer lo mismo. Simplemente llame a la función en su lugar. Esto también es beneficioso si algo cambia. Solo necesita actualizarlo en un lugar:la función. Si no usó la función, deberá actualizarla en varios lugares de su aplicación.
- Rendimiento
- Los UDF reducen el costo de compilación del código T-SQL al almacenar en caché los planes y reutilizarlos para ejecuciones repetidas. No es necesario volver a analizar y optimizar el UDF con cada uso. Esto da como resultado tiempos de ejecución mucho más rápidos.
- Tráfico de red reducido
- Una operación que filtra datos en función de una restricción compleja 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
WHERE
cláusula para reducir el número de filas enviadas al cliente.
Las UDF también pueden tener otros beneficios más específicos, como en el ejemplo anterior que mencioné con la columna calculada que accede a los datos en otra tabla.
Tipos de funciones definidas por el usuario
Hay dos tipos de funciones definidas por el usuario de T-SQL:
- Funciones escalares
- Las funciones escalares definidas por el usuario devuelven un solo valor de datos. Usted define el tipo de valor en la función. El tipo de retorno puede ser cualquier tipo de datos excepto texto , ntext , imagen , cursor y marca de tiempo .
- Funciones con valores de tabla
- Las funciones con valores de tabla (TVF) devuelven una tabla. Por lo tanto, su tipo de devolución es tabla . Hay dos tipos de TVF:TVF en línea y TVF de múltiples declaraciones. Un TVF en línea no tiene un cuerpo funcional. Su tabla de retorno es el resultado de un solo
SELECT
declaración. Por otro lado, un TVF de instrucciones múltiples tiene un cuerpo de función. Con TVF de múltiples declaraciones, especifica la estructura de la tabla en la variable de retorno.
También puede crear funciones escalares y con valores de tabla como funciones definidas por el usuario de Common Language Runtime (CLR).
A partir de SQL Server 2005 (9.x), puede escribir funciones definidas por el usuario en cualquier lenguaje de programación de Microsoft .NET Framework, como Microsoft Visual Basic .NET o Microsoft Visual C#.