Відповіді:
Є два смаки функцій, які оцінюються за столом. Один, який є лише оператором select, і те, що може мати більше рядків, ніж просто оператор select.
Це не може мати змінну:
create function Func() returns table
as
return
select 10 as ColName
Ви повинні зробити це так:
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
тоді як MSTVF поводиться більше як непрозора процедура зберігання (хоча і має свої переваги порівняно з проростками). Вбудованим функціям слід віддавати перевагу над MSTVF. Якщо вам потрібно обчислити та зберегти проміжні значення (наприклад, результат складного вираження скалярної функції), тоді використовуйте підзапит.