T-SQL: как использовать пользовательскую функцию с табличным параметром в операторе выбора

У меня есть следующий код для преобразования записей с целым столбцом в двоичный код:

CREATE TYPE T_Table AS table(MyColumn int);
GO

CREATE FUNCTION FUNC_Test(@table T_Table READONLY) RETURNS varbinary AS BEGIN

    ...

    RETURN <anything as varbinary>
END;
GO

SELECT
    X.ID
    ,dbo.FUNC_Test(
        (SELECT <anything as int> FROM <any table y> WHERE ID = X.ID)
    )
FROM
    <any table x> AS X
GROUP BY
    X.ID
;
GO

Но это не работает. Почему я не могу использовать оператор Select в качестве параметра для определенной пользователем функции?

Это возможно без CLR?

1 ответ

Параметр функции FUNC_Test должен быть из T_Table тип.

Это будет работать:

DECLARE @T T_Table;
SELECT FUNC_Test(@T) AS b;

Это не будет работать:

DECLARE @T TABLE (MyColumn int);
SELECT FUNC_Test(@T) AS b;

Столкновение с типом операнда: таблица несовместима с таблицей T_Table

Протестировано на SQL Server 2014 Express. Я думаю, это одно из ограничений табличных параметров.

Как указано в комментариях, один из возможных обходных путей - пройти только ID в качестве параметра и выполнить фактический запрос внутри функции.

Другие вопросы по тегам