In questa pagina
Messaggio
Codice: 2389
Messaggio in italiano: Utilizzo non valido di un operatore con effetto collaterale ‘%1!’ nell’ambito di una funzione.
Messaggio in inglese: Invalid use of a side-effecting operator ‘%s’ within a function.
Spiegazione
In una funzione non è possibile utilizzare dei comandi che possano modificare i dati all’interno del database.
Per esempio, non è possibile fare query di INSERT, UPDATE, DELETE, né è possibile creare tabelle, nemmeno temporanee. Resta comunque possibile creare variabili tabella in funzioni con valori di tabella con istruzioni multiple (multi-statement table-valued function).
Causa
Si è tentato di utilizzare comandi che modificano il database (operatore con effetto collaterale) all’interno di una funzione.
Esempio:
CREATE FUNCTION fa.FX_GetGlobalAccumulations
(
@Domain NVARCHAR(200),
@Workspace NVARCHAR(200)
)
RETURNS @ret TABLE (id INT)
AS
BEGIN
EXEC('SELECT database_id FROM sys.databases')
RETURN
END
Parametri
%1! rappresenta l’operatore che non è possibile eseguire dentro la funzione.
Soluzione
Rimuovere l’operatore con effetto collaterale, oppure valutare di usare una stored procedure al posto di una funzione.