2010-07-08 34 views

Respuesta

4

Sí, con tal de que la función con valores de tabla devuelve una tabla cuando esté hecho.

Las funciones definidas por el usuario se pueden anidar; es decir, una función definida por el usuario puede llamar a . El nivel de anidamiento es incrementado cuando la función llamada se inicia la ejecución y disminuye cuando la función llamada finaliza la ejecución . Las funciones definidas por el usuario pueden anidarse hasta en 32 niveles. Excediendo los niveles máximos de anidamiento causan toda la cadena de función de llamada a falla. Cualquier referencia al código administrado de una función de Transact-SQL definida por el usuario cuenta como un nivel contra el límite de anidación de 32 niveles. Los métodos invocados desde el código administrado do no cuentan contra este límite.

http://msdn.microsoft.com/en-us/library/ms186755.aspx

Esto es muy simplista, pero funciona:

--DROP FUNCTION RETURN_INT 
--GO 
CREATE FUNCTION RETURN_INT() 
    RETURNS INT 
WITH EXECUTE AS CALLER 
AS 
BEGIN 
    RETURN 1 
END 

GO 

--DROP FUNCTION RETURN_TABLE 
--GO 
CREATE FUNCTION RETURN_TABLE() 
    RETURNS @Test TABLE (
    ID INT 
) 
WITH EXECUTE AS CALLER 
AS 
BEGIN 

INSERT INTO @Test 
    SELECT DBO.RETURN_INT() 
RETURN 
END 
+0

¿Tienes algún ejemplo ... mi uno no está funcionando ... Gracias –

+0

No es fácilmente disponible, pero intentaré encontrar una. – kemiller2002

+0

Gracias Kevin, eso ayudaría mucho –

Cuestiones relacionadas