Вот мой пользовательский тип таблицы...
CREATE TYPE [dbo].[FooType] AS TABLE(
[Bar] [INT],
)
Это - то, что я должен был сделать в своей табличной функции для возврата типа:
CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes TABLE ([Bar] [INT])
INSERT INTO @FooTypes (1)
RETURN
В основном я должен повторно объявить свое определение типа в Операторе возврата функции. Нет ли способ, которым я могу просто объявить тип в Операторе возврата?
Я думал бы, что это будет работать:
CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes [FooType]
INSERT INTO @FooTypes (1)
RETURN
Не может найти справку на MSDN/Google относительно этого.... никем?
Править
Я снял выделение со своего ответа, и ударяющий этот вопрос - поскольку я встречаюсь с тем же сценарием 6 несколько месяцев спустя.
У кого-либо есть какая-либо идея, если возможно возвратить определяемый пользователем тип таблицы из табличной функции? В противном случае есть ли лучшее обходное решение кроме того, что я сделал? (повторно объявите тип снова).
Хорошо, значит, это невозможно.
Достаточно просто дублировать определение таблицы в возвращаемом типе (с использованием скриптов).
Тем не менее - надеюсь, эта проблема будет исправлена в следующей версии SQL Server.
Я не верю, что это возможно. Вы не можете использовать UDTT в качестве возвращаемого типа функции со скалярным значением, потому что это не скалярное значение. Вы также не можете заменить табличное объявление функции с табличным значением на UDTT. Повторение определения таблицы кажется единственным вариантом. Если бы мы знали, почему вы это делаете, возможно, мы смогли бы найти альтернативу.