Каков правильный синтаксис для вызова встроенного TVF с именованными параметрами? - PullRequest
8 голосов
/ 22 ноября 2011

Я попытался вызвать встроенный TVF с позиционными параметрами, и он прекрасно работает:

SELECT MyTable.Col1,
       (SELECT TvfColumn FROM ufnGetData(MyTable.Col1, MyTable.Col2)),
       MyTable.Col2
FROM MyTable

Затем я попытался назвать параметры для TVF, и он не анализирует:

SELECT MyTable.Col1,
       (SELECT TvfColumn FROM ufnGetData(@Param1=MyTable.Col1, @Param2=MyTable.Col2)),
       MyTable.Col2
FROM MyTable

Функция выглядит примерно так:

CREATE FUNCTION dbo.ufnGetData
(   
    @Param1 INT,
    @Param2 INT
)
RETURNS TABLE 
AS
RETURN 
(
SELECT 
       blah blah blah AS TvfColumn
)
GO

Выдает ошибку, похожую на:

Сообщение 137, Уровень 15, Состояние 2, Строка 23 Необходимо объявить скалярную переменную "@ Param2".

Сообщение 102, Уровень 15, Состояние 1, Строка 24 Неверный синтаксис рядом с ','.

Что я делаю не так?

1 Ответ

8 голосов
/ 22 ноября 2011

Табличные значения пользовательских функций не могут рассматриваться как хранимая процедура. Вы не используете именованные параметры при вызове их, это основано на позиции. Другими словами, то, что вы пытаетесь сделать, невозможно.

Есть ли причина, по которой вы хотите использовать именованные параметры? Вам необходимо определить все параметры, чтобы не было реальной выгоды, которую вы обычно видели бы с помощью хранимых процедур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...