Ho provato a chiamare un filtro in linea TVF con i parametri posizionali e funziona benissimo:Chiamando un TVF in linea con parametri denominati, qual è la sintassi corretta?
SELECT MyTable.Col1,
(SELECT TvfColumn FROM ufnGetData(MyTable.Col1, MyTable.Col2)),
MyTable.Col2
FROM MyTable
poi ho cercato di nominare i parametri al TVF e non analizza:
SELECT MyTable.Col1,
(SELECT TvfColumn FROM ufnGetData(@Param1=MyTable.Col1, @Param2=MyTable.Col2)),
MyTable.Col2
FROM MyTable
La funzione sembra qualcosa di simile:
CREATE FUNCTION dbo.ufnGetData
(
@Param1 INT,
@Param2 INT
)
RETURNS TABLE
AS
RETURN
(
SELECT
blah blah blah AS TvfColumn
)
GO
Dare un errore simile a:
Msg 137, livello 15, stato 2, riga 23 Deve dichiarare la variabile scalare "@ Param2".
Messaggio 102, livello 15, stato 1, riga 24 Sintassi non corretta vicino a ",".
Cosa sto sbagliando?
Il vero vantaggio è che posso modificare l'ordine dei parametri nel TVF senza influire sui chiamanti. È anche più facile vedere quali sono i parametri, se vengono denominati, anche se posso ottenere lo stesso effetto con commenti in linea ben posizionati. –
@MichaelGoldshteyn Spiacente, non è possibile con SQL Server. –
RE: "o qualsiasi funzione". Questo non è vero. Le UDF scalari possono essere richiamate con 'EXEC' e accettare parametri con nome in quel caso. –