SQL Server 2008: может ли определяемая пользователем функция с несколькими операторами возвращать определяемый пользователем тип?

Возможно ли, что UDF с несколькими операторами возвращает тип таблицы, определяемый пользователем, вместо таблицы, которая определена в его возвращаемом параметре?

Итак, вместо:

CREATE FUNCTION MyFunc 
(
    @p1 int, @p2 char
)
RETURNS 
@SomeVar TABLE 
(
    c1 int
)
AS

Я хотел бы сделать:

CREATE FUNCTION MyFunc 
(
    @p1 int, @p2 char
)
RETURNS 
@SomeVar MyTableType
AS

Причина этого в том, что внутри моей функции я вызываю другие функции и должен передать MyTableType UDT, даже если я определяю точно такое же определение таблицы в типе таблицы RETURN, это вызовет ошибку конфликта операндов.


person Gideon    schedule 16.12.2009    source источник


Ответы (1)


Лучшее, что я смог придумать, это объявить табличную переменную вашего типа локальной для функции и использовать ее во всем коде. Затем выполните INSERT...SELECT в таблице параметров прямо перед оператором RETURN.

До сих пор я избегал пользовательских типов. Хотя они кажутся многообещающими, с возможностью изменения типа в одном месте вместо изменения типов данных везде, они просто никогда не работают, когда речь идет о производительности и обслуживании из-за подобных проблем.

person Tom H    schedule 16.12.2009
comment
Я также думал об этом обходном пути, но просто надеялся, что я что-то упустил из виду, и все, что я хочу, действительно возможно. Я разделяю ваше мнение о них, но в этой конкретной проблеме я думаю, что преимущества перевешивают уродливые обходные пути... - person Gideon; 16.12.2009
comment
Нет - это невозможно. Я задавал этот вопрос недавно. Необходимо повторно объявить UDT как временную таблицу в UDF. - person RPM1984; 20.12.2010