sql >> Base de Datos >  >> RDS >> Sqlserver

¿Qué es una función con valores de tabla en SQL Server?

En SQL Server, una función con valores de tabla (TVF) es una función definida por el usuario que devuelve una tabla. Esto contrasta con una función escalar, que devuelve un solo valor.

Puede invocar una función con valores de tabla de la misma manera que puede consultar una tabla. Por ejemplo, puede usarlo en un SELECT declaración. En algunos casos, las funciones con valores de tabla también se pueden usar para actualizar, eliminar e insertar datos.

Tipos de funciones con valores de tabla

Cuando crea una función con valores de tabla, tiene la opción de crear una función con valores de tabla de Transact-SQL o una función con valores de tabla de Common Language Runtime (CLR).

Funciones con valores de tabla de Transact-SQL

Los TVF de Transact-SQL pueden ser uno de los siguientes:

Función con valores de tabla en línea (ITVF)
Cuando creas un ITVF, inicias la definición de la función con RETURNS TABLE , y el subsiguiente SELECT define la estructura de la tabla de retorno.
Función con valores de tabla de declaraciones múltiples (MSTVF)
Una función con valores de tabla de varias declaraciones puede contener varias declaraciones, cuyos resultados se guardan en una variable que declara al comienzo de la función. Cuando hace esto, especifica explícitamente la estructura de la tabla de retorno.

Funciones con valores de tabla CLR

Desde la perspectiva de CLR, la sintaxis es similar a la ITVF de T-SQL, pero ligeramente diferente. Especifica explícitamente la estructura de la tabla de retorno, pero no declara una variable de retorno.

Las funciones con valores de tabla de CLR se implementan como métodos en una clase en un ensamblado de Microsoft .NET Framework.

Para obtener una descripción general más detallada de CLR TVF, consulte la documentación de Microsoft para CLR Table-Valued Functions.

Ejemplo 1:función con valores de tabla en línea

Este es un ejemplo del código T-SQL utilizado para crear una función con valores de tabla en línea.

CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
    RETURNS TABLE
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName
    );
GO

Podemos decir que esta es una función con valores de tabla en línea, porque no especifica la estructura de la tabla de retorno. Simplemente indica RETURNS TABLE , luego se basa en SELECT instrucción para determinar la estructura de la tabla de retorno.

En este caso, la función requiere que se pase el nombre del gato como argumento.

Consulte Crear una función con valores de tabla en línea para ver ejemplos de cómo agregar opciones, como el enlace de esquema y el cifrado.

El enlace de esquema suele ser una buena idea, ya que evitará que se realicen cambios adversos en los objetos subyacentes a los que hace referencia la función.

Ejemplo 2:función con valores de tabla de declaraciones múltiples

Así es como escribiríamos la función si quisiéramos que fuera una función con valores de tabla de varias instrucciones.

CREATE FUNCTION udf_CatsByName_MSTVF( @CatName varchar(70) )
    RETURNS @cats TABLE (
        CatId int,
        CatName varchar(70),
        Phone varchar(10)
    )
AS
BEGIN
    INSERT INTO @cats
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName;

    RETURN;
END;
GO

En este caso, usamos una variable de tipo tabla llamado @cats y especificamos explícitamente la estructura de la tabla de retorno. Los resultados de la consulta se almacenan en esa variable, que luego se devuelve cuando se invoca la función.

Este ejemplo no le hace mucha justicia a MSTVF, porque solo incluyo una declaración. El punto principal de los MSTVF es que puede incluir varias declaraciones y puede agregar la salida de esas declaraciones a la variable de retorno.

Consulte Crear una función con valores de tabla de varias declaraciones para ver un ejemplo del uso de varias declaraciones, así como ejemplos de cómo agregar opciones como el enlace de esquema y el cifrado.

Ejemplo 3:seleccionar datos de nuestras funciones con valores de tabla

Entonces, ahora que hemos creado nuestras funciones, podemos invocarlas usando SELECT declaración.

SELECT * FROM udf_CatsByName_ITVF('Tom');
SELECT * FROM udf_CatsByName_MSTVF('Tom');

Resultado:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 3       | Tom       | 7871237652 |
+---------+-----------+------------+
(1 row affected)
+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 3       | Tom       | 7871237652 |
+---------+-----------+------------+
(1 row affected)

Tanto ITVF como MSTVF se invocaron con la misma sintaxis y ambos devolvieron el mismo resultado.

Invocación de funciones con valores de tabla

Las funciones con valores de tabla se pueden invocar donde se permiten expresiones de tabla en FROM cláusula de SELECT , INSERT , UPDATE o DELETE declaraciones.

Esto significa que puede seleccionar datos, insertar datos, actualizar datos e incluso eliminar datos a través de una función con valores de tabla.

Aquí hay artículos que demuestran cada uno:

  • Seleccionar datos a través de una función con valores de tabla
  • Actualizar datos a través de una función con valores de tabla
  • Insertar datos a través de una función con valores de tabla
  • Eliminar datos a través de una función con valores de tabla