В SQL Server, если у меня есть функция со скалярным значением, которая принимает аргумент параметра с табличным значением, определенный следующим образом (упрощенный пример):
CREATE TYPE IntTableType AS TABLE(Value INT);
CREATE FUNCTION dbo.MeetsCustomRequirements
(
@TypeIDs IntTableType READONLY
)
RETURNS TINYINT AS
BEGIN
-- (Function logic here; returns either 0 or 1 based on the specified @TypeIDs values)
END
Я хотел бы иметь возможность вызывать эту функцию из представления, где возвращающий табличное значение параметр представления создается из встроенного запроса, например:
CREATE VIEW dbo.vEligibleItems AS
SELECT i.ItemID
FROM tItems i
WHERE dbo.MeetsCustomRequirements (
(SELECT TypeID FROM tItemTypes WHERE ItemID = i.ItemID)
);
Однако это не работает, потому что результат этого вложенного запроса SELECT не является IntTableType (хотя он является списком INT значений). (Определенная ошибка Error 206: Operand type clash: int is incompatible with IntTableType.)
Мой вопрос, состоящий из двух частей: есть ли способ вызвать функцию, принимающую аргумент параметра с табличным значением из представления? Если нет, то какие существуют альтернативные подходы для достижения того же результата?
База данных - это SQL Server 2008.
(Внесение логики в функцию, встроенную в представление, не идеально, потому что функция вызывается из нескольких разных мест, а не только из этого одного представления.)
dbo.MeetsCustomRequirements? - person ps2goat   schedule 26.08.2015