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
в качестве параметра и выполнить фактический запрос внутри функции.