Próbowałem nazywając in-line TVF z parametrów pozycyjnych i działa prawidłowo:Wywołanie in-line TVF z nazwanymi parametrami, jaka jest właściwa składnia?
SELECT MyTable.Col1,
(SELECT TvfColumn FROM ufnGetData(MyTable.Col1, MyTable.Col2)),
MyTable.Col2
FROM MyTable
Potem starałem się wymienić parametry do TVF i nie analizuje:
SELECT MyTable.Col1,
(SELECT TvfColumn FROM ufnGetData(@Param1=MyTable.Col1, @Param2=MyTable.Col2)),
MyTable.Col2
FROM MyTable
Funkcja wyglądał:
CREATE FUNCTION dbo.ufnGetData
(
@Param1 INT,
@Param2 INT
)
RETURNS TABLE
AS
RETURN
(
SELECT
blah blah blah AS TvfColumn
)
GO
Nadanie błąd podobny do:
Msg 137, Poziom 15, Stan 2, Wiersz 23 Musi zadeklarować zmienną skalarną "@ Param2".
Msg 102, Poziom 15, Stan 1, Wiersz 24 Niepoprawna składnia w pobliżu ",".
Co robię źle?
Prawdziwą korzyścią jest to, że mogę zmienić kolejność parametrów w TVF bez wpływu na osoby dzwoniące. Łatwiej też zobaczyć, jakie są parametry, jeśli są nazwane, chociaż mogę uzyskać ten sam efekt dzięki dobrze umieszczonym komentarzom wstawianym. –
@MichaelGoldshteyn Niestety, nie jest to możliwe z SQL Server. –
RE: "lub dowolna funkcja". To nie jest prawda. Skalarne UDF można wywoływać za pomocą 'EXEC' i przyjmować nazwane parametry w tym przypadku. –