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

Introducción a las funciones con valores de tabla de declaraciones múltiples (MSTVF) en SQL Server

En SQL Server, la función con valores de tabla de instrucciones múltiples es uno de los dos tipos de funciones con valores de tabla de Transact-SQL (el otro tipo es la función con valores de tabla en línea).

Las funciones con valores de tabla (TVF) son un tipo de función definida por el usuario que devuelve sus resultados en forma de tabla. Por lo tanto, se pueden consultar como una tabla normal.

Los TVF de varias declaraciones (a veces denominados MSTVF) pueden constar de varias declaraciones, cuyos resultados se almacenan en una variable de retorno. Incluya las especificaciones de la variable de retorno en la parte superior de la función. Esto especifica la estructura de la tabla de retorno. En otras palabras, especificas cuántas columnas, sus nombres, tipos de datos, etc.

Esto contrasta con los TVF en línea (también denominados ITVF), que no utilizan una variable de retorno (la tabla de retorno está definida por SELECT declaración).

Los MSTVF también usan el BEGIN /END sintaxis, que es otra cosa que los distingue de los ITVF (los ITVF no usan esa sintaxis).

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

Este es un ejemplo de un MSTVF básico:

CREATE FUNCTION dbo.udf_PetsByName_MSTVF( @PetName varchar(70))
    RETURNS @pets TABLE (
        PetId varchar(20),
        PetName varchar(70)
    )
AS
BEGIN
    INSERT INTO @pets
    SELECT 
        CONCAT('Cat', ' ', CatId),
        CatName
    FROM dbo.Cats
    WHERE CatName = @PetName;

    INSERT INTO @pets
    SELECT 
        CONCAT('Dog', ' ', DogId),
        DogName
    FROM dbo.Dogs
    WHERE DogName = @PetName;

    IF @@ROWCOUNT = 0
    BEGIN
        INSERT INTO @pets
        VALUES (
            '',
            'There are no pets of that name.'
            )
    END

    RETURN;
END;

GO

Aquí, empiezo la función definiendo la variable de retorno llamada @pets . Es de tipo tabla , y devolverá dos columnas.

En este caso tengo dos SELECT sentencias y un IF declaración. Los resultados de cada uno se almacenan en la variable de retorno. Esto se hace a través de un INSERT declaración cada vez.

Opciones de funciones

También puede especificar cosas como si usar o no el enlace de esquema (probablemente debería) y si cifrar o no la función.

El enlace de esquema evitará que se realicen cambios adversos en los objetos subyacentes de los que depende la función (como eliminar una tabla, modificar una columna, etc.).

El cifrado convertirá la definición de la función a un formato ofuscado (para evitar que otros puedan leerlo).

Consulte Crear una función con valores de tabla de valores múltiples para ver ejemplos de cómo agregar enlace de esquema y cifrado a un ITVF.