He intentado llamar a una TVF en línea con los parámetros de posición y funciona bien:Llamar a un TVF en línea con parámetros con nombre, ¿cuál es la sintaxis correcta?
SELECT MyTable.Col1,
(SELECT TvfColumn FROM ufnGetData(MyTable.Col1, MyTable.Col2)),
MyTable.Col2
FROM MyTable
Luego trató de nombrar los parámetros a la TVF y no analiza:
SELECT MyTable.Col1,
(SELECT TvfColumn FROM ufnGetData(@Param1=MyTable.Col1, @Param2=MyTable.Col2)),
MyTable.Col2
FROM MyTable
La función se ve algo como:
CREATE FUNCTION dbo.ufnGetData
(
@Param1 INT,
@Param2 INT
)
RETURNS TABLE
AS
RETURN
(
SELECT
blah blah blah AS TvfColumn
)
GO
Dar un error similar al siguiente:
Msg 137, nivel 15, estado 2, línea 23 Debe declarar la variable escalar "@ Param2".
Msg 102, nivel 15, estado 1, línea 24 Sintaxis incorrecta cerca de ','.
¿Qué estoy haciendo mal?
El beneficio real es que puedo cambiar el orden de los parámetros en el TVF sin afectar a las personas que llaman. También es más fácil ver cuáles son los parámetros, si se nombran, aunque puedo obtener el mismo efecto con comentarios en línea bien colocados. –
@MichaelGoldshteyn Lo sentimos, no es posible con SQL Server. –
RE: "o cualquier función". Esto no es verdad. Las UDF escalares se pueden invocar con 'EXEC' y aceptar parámetros nombrados en ese caso. –