Odpowiedzi:
Istnieją dwa rodzaje funkcji o wartościach tabelarycznych. Taką, która jest tylko instrukcją select i taką, która może mieć więcej wierszy niż tylko instrukcja select.
To nie może mieć zmiennej:
create function Func() returns table
as
return
select 10 as ColName
Zamiast tego musisz zrobić tak:
create function Func()
returns @T table(ColName int)
as
begin
declare @Var int
set @Var = 10
insert into @T(ColName) values (@Var)
return
end
VIEW
podczas gdy MSTVF zachowuje się bardziej jak nieprzejrzysta procedura składowana (choć ma swoje zalety w porównaniu do sprocs). Funkcje wbudowane powinny być preferowane zamiast MSTVF. Jeśli musisz obliczyć i zapisać wartości pośrednie (takie jak wynik złożonego wyrażenia funkcji skalarnej), użyj podzapytania.