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

Introducción a las funciones con valores de tabla en línea (ITVF) en SQL Server

En SQL Server, la función con valores de tabla en línea 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 de instrucciones múltiples).

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 en línea (a veces denominados ITVF) no tienen variables de retorno asociadas. El valor de retorno se define a través de un solo SELECT declaración. Esta sentencia define la estructura de la tabla de retorno. Esto contrasta con los TVF de varias instrucciones (también denominados MSTVF), que requieren una variable de retorno.

Las ITVF tampoco utilizan el BEGIN /END sintaxis, que es otra cosa que los distingue de los MSTVF.

A menudo se considera que los TVF en línea tienen un mejor rendimiento que los TVF de varias declaraciones, aunque esto también dependerá de lo que intente hacer en la función.

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

Aquí hay un ejemplo de una ITVF básica:

CREATE FUNCTION dbo.ufn_AlbumsByArtist(@ArtistId int)
RETURNS TABLE
AS
RETURN (  
    SELECT 
      al.ArtistId,
      al.AlbumName,
      g.Genre
    FROM dbo.Albums al 
      INNER JOIN dbo.Artists ar 
        ON al.ArtistId = ar.ArtistId
      INNER JOIN Genres g
        ON al.GenreId = g.GenreId
    WHERE al.ArtistId = @ArtistId
);

GO

Básicamente consiste en un SELECT declaración envuelta dentro de algún otro código. Para convertirlo específicamente en en línea TVF, inicié la función con RETURNS TABLE , seguido de cerca por RETURN , y terminando con un SELECT declaración entre paréntesis.

Declaraciones múltiples

Aunque las funciones con valores de tabla en línea no están diseñadas para múltiples SELECT declaraciones (para eso están los MSTVF), es posible usar el UNION operador para combinar el conjunto de resultados de varias declaraciones.

Ejemplo:

CREATE FUNCTION [dbo].[udf_PetsByName_ITVF]( @PetName varchar(70))
    RETURNS TABLE 
AS
RETURN (
    SELECT 
        CONCAT('Cat', ' ', CatId) AS PetId,
        CatName
    FROM dbo.Cats
    WHERE CatName = @PetName

    UNION ALL

    SELECT 
        CONCAT('Dog', ' ', DogId) AS PetId,
        DogName
    FROM dbo.Dogs
    WHERE DogName = @PetName
    );

GO

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 en línea para ver ejemplos de cómo agregar enlace de esquema y cifrado a un ITVF.