2010-07-08 12 views

Odpowiedz

4

Tak, tak długo, jak funkcja wycenione tabela zwraca tabelę, kiedy to zrobić.

Funkcje zdefiniowane przez użytkownika można zagnieżdżać; czyli jedna funkcja zdefiniowana przez użytkownika może zadzwonić na inną. Poziom zagnieżdżania to zwiększany, gdy wywołana funkcja rozpoczyna wykonywanie, a zmniejszona, gdy wywołana funkcja kończy się wykonaniem. Funkcje zdefiniowane przez użytkownika mogą być zagnieżdżone do 32 poziomów. Przekraczając , maksymalne poziomy zagnieżdżania powodują, że cały łańcuch wywołujący funkcję nie działa z powodu . Wszelkie odniesienia do zarządzanego kodu z zdefiniowanej przez użytkownika Transact-SQL funkcji są liczone jako jeden poziom w stosunku do 32-poziomowego limitu zagnieżdżania. Metody wywoływane z kodu zarządzanego do nie liczą się z tym limitem.

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

Jest to bardzo proste, ale to działa:

--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

Jeżeli masz żadnego przykładu ... mój jeden nie działa ... Dzięki –

+0

nie są łatwo dostępne, ale spróbuję wymyślić jedną. – kemiller2002

+0

Dzięki Kevin, to bardzo pomogłoby –

Powiązane problemy