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.