Кажется, я помню, что видел статьи из kb об ошибках со скалярными UDF в SQL2000, которые могли вызвать нарушения прав доступа. Сначала я отделю приведение от списка параметров UDF и сделаю это в другой строке
Заменить
SELECT @UserID = dbo.fnGetManagerId(CAST(@Key AS INT)) -- numeric
С
DECLARE @K int
SET @K = CAST(@Key AS INT)
SELECT @UserID = dbo.fnGetManagerId(@K)
затем, если проблема не устранена, закомментируйте строку за раз, пока не найдете виновного.
Я бы посмотрел в журналах ошибок SQL Server. Также вы можете использовать SQL Profiler для отслеживания сообщений об ошибках пользователя. Достаточно высокая ошибка серьезности закрывает соединение автоматически.