Sto scrivendo una funzione definita dall'utente in SQL Server 2008. So che le funzioni non possono generare errori nel solito modo - se si tenta di includere l'istruzione RAISERROR SQL restituisce:Come segnalare un errore da una funzione definita dall'utente di SQL Server
Msg 443, Level 16, State 14, Procedure ..., Line ...
Invalid use of a side-effecting operator 'RAISERROR' within a function.
Ma il fatto è, la funzione richiede un po 'di ingresso, che può essere valido e, se lo è, non v'è alcun valore significativo la funzione può restituire. Cosa faccio allora?
Potrei, ovviamente, restituire NULL, ma sarebbe difficile per qualsiasi sviluppatore che utilizza la funzione per risolvere questo problema. Potrei anche causare una divisione per zero o qualcosa del genere - questo genererebbe un messaggio di errore, ma uno fuorviante. C'è un modo in cui posso avere il mio messaggio di errore segnalato in qualche modo?
SI !!! Funziona! È geniale! – EMP
Ottima risposta, ma JEEZ è stato hackerato. > :( – JohnL4
Per una funzione di valore inline-table dove il RETURN è una selezione semplice, questo da solo non funziona perché non viene restituito nulla - nemmeno null, e nel mio caso ho voluto lanciare un errore quando non è stato trovato nulla Non volevo suddividere la funzione inline in una multi-statment per ragioni evidenti di prestazioni, ma ho usato la tua soluzione più ISNULL e MAX.La statica RETURN ora appare così: SELECT ISNULL (MAX (E.EntityID) , CAST ('La ricerca (' + @LookupVariable + ') non esiste.' Come Int)) [EntityID] FROM Entity come E DOVE E.Lookup = @ LookupVariable – MikeTeeVee