Динамически возвращать таблицу с разными столбцами в пользовательской табличной функции. - PullRequest
1 голос
/ 29 июля 2011

Существует несколько ограничений между хранимой процедурой 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 или это одно из отличий?

1 Ответ

3 голосов
/ 29 июля 2011

Извините, вы не можете использовать динамический SQL в функции. Возможно, вы можете написать хранимую процедуру, которая создает функцию в динамическом SQL, вызывает функцию и затем удаляет ее. Но тогда почему бы просто не встроить запрос в этот момент.

...