Я пытаюсь выбрать те же столбцы из другой таблицы / представления в зависимости от значения аргумента (@ruleset). Поскольку невозможно передать имя таблицы в качестве параметра или создать имя внутри функции, используется структура CASE вне операторов выбора. Однако я получаю ошибку:
«В списке выбора можно указать только одно выражение, если подзапрос не введен с EXISTS».
[Надеюсь, я правильно понял, это мой первый вопрос здесь.]
CREATE FUNCTION app.fgProduct
(
@ruleset nvarchar(50),
@matno nvarchar(50),
@datarevision int
)
RETURNS TABLE
AS
RETURN
(
SELECT
CASE WHEN @ruleset = 'G1' THEN
(
SELECT
@matno AS ProductId
,@datarevision AS DataRevision
,[ProductName]
FROM [ruleset].[g1gxProduct]
WHERE ProductId = @matno
)
WHEN @ruleset = 'G2' THEN
(
SELECT
@matno AS ProductId
,@datarevision AS DataRevision
,[ProductName]
FROM [ruleset].[g2gxProduct]
WHERE ProductId = @matno
)
END
)
Существует множество других представлений, поэтому эту проблему невозможно решить за одну процедуру. Выше приведен пример функции, которая используется для генерации новых записей на основе различных наборов правил (= наборов представлений).