Uważam, że UDF są bardzo przydatne i używam ich cały czas.
Nie jestem pewien, jakie jest uzasadnienie Microsoftu, aby nie uwzględniać odpowiednika sys.functions w SQL Server 2005 (lub SQL Server 2008, o ile wiem), ale dość łatwo jest stworzyć własny:
CREATE VIEW my_sys_functions_equivalent
AS
SELECT *
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF') -- scalar, inline table-valued, table-valued