SQL Server 2008 - Как мне вернуть пользовательский тип таблицы из функции с табличным значением?

StackOverflow https://stackoverflow.com/questions/3089553

Вопрос

Вот мой пользовательский тип таблицы...

CREATE TYPE [dbo].[FooType] AS TABLE(
 [Bar] [INT],
)

Это то, что мне пришлось сделать в моей табличной функции, чтобы вернуть тип:

CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes TABLE ([Bar] [INT])
INSERT INTO @FooTypes (1)
RETURN

По сути, мне приходится повторно объявлять определение моего типа в операторе RETURN функции.Разве нет способа, которым я мог бы просто объявить тип в операторе RETURN?

Я бы подумал, что это сработает:

CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes [FooType]
INSERT INTO @FooTypes (1)
RETURN

Не удается найти какую-либо помощь в MSDN / Google по этому поводу .... кто-нибудь?

Редактировать

Я не отметил свой ответ и задаю этот вопрос, поскольку 6 месяцев спустя сталкиваюсь с тем же сценарием.

У кого-нибудь есть какие-либо идеи, возможно ли вернуть определенный пользователем тип таблицы из функции с табличным значением?Если нет, есть ли лучшее решение, отличное от того, что я сделал?(повторно объявите тип еще раз).

Это было полезно?

Решение 2

Хорошо, значит, это невозможно сделать.

Достаточно легко продублировать определение таблицы в возвращаемом типе (с использованием сценариев).

Тем не менее, надеюсь, эта проблема будет исправлена в следующей версии SQL Server.

Другие советы

Даже если вы не можете вернуть UDTT из функции, вы можете вернуть переменную таблицы и получить ее в UDTT Пока совпадение схемы. Отказ Следующий код проверяется в SQL Server 2008 R2

- Создайте UDTT

CREATE TYPE dbo.MyCustomUDDT AS TABLE
(
    FieldOne varchar (512),
    FieldTwo varchar(1024)
)

- объявить ваши переменные

DECLARE @uddt MyCustomUDDT;
DECLARE @Modifieduddt MyCustomUDDT;

// вызвать функцию

INSERT INTO @Modifieduddt SELECT * FROM dbo.MyUDF(@uddt);

Функция подписи

CREATE FUNCTION dbo.MyUDF(@localUDDT MyCustomUDDT)
RETURNS @tableVar TABLE
(
    FieldOne varchar (512),
    FieldTwo varchar(1024)
)
AS
BEGIN
 --Modify your variable here
RETURN
END

Надеюсь, это поможет кому-то.

Синтаксис для Создать функцию Указывает, что единственный способ определить тип возврата таблицы - это перечисление столбцов и типов, а <table_type_definition>. Отказ Даже SQL Server "Denali" имеет то же определение для <table_type_definition>. Отказ Хотя странно, это синтаксис не включает в себя многоквартизальные функции таблицы или что-то еще, что ссылается на этот фрагмент.

Я не верю, что это возможно. Вы не можете использовать UDTT в качестве возвращаемого типа скалярной функции, потому что это не скалярное значение. Вы также не можете заменить таблицу декларацию таблицы функции с UDTT. Повторение определения таблицы, кажется, является единственным вариантом. Если бы мы знали, почему вы делаете это, возможно, мы могли бы найти альтернативу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top