Существует несколько ограничений между хранимой процедурой SQL Server и пользовательской функцией.
UDF не может
- использовать недетерминированные функции
- изменить состояние базы данных
- Вернуть сообщения звонящему
- имеют побочные эффекты
Хранимая процедура может возвращать несколько наборов записей, и они не обязаны возвращать одни и те же поля каждый раз.
create proc custom.sproc_CrazyFields
@ThisItem int
as
begin
if @ThisItem < 10
begin
select 'this' as ThisField, 'that' as ThatField, 'theOther' as theOtherField;
end
else
begin
Select 'theOther' as theOtherField, 'that' as thatField, 'this' as thisField;
end
end
go
exec custom.sproc_CrazyFields 4
exec custom.sproc_CrazyFields 40
Встроенная функция возвращает только один оператор выбора.
Многоуровневая функция должна объявлять возвращаемую таблицу.
Есть ли способ динамического возврата результата с изменением столбцов с помощью UDF или это одно из отличий?