De hecho no puedes pasar directamente un rand() dentro de una funcion...pero podemos hacer un pequeño truco...

, después de ver tu code hay que hacer una serie de correciones tanto en el código como tipos de datos...,  
Prueba de ésta forma: (copia y pega) 
crea una vista así:  
 Cita:  CREATE VIEW vRandom
AS
SELECT RAND() as numero
    Despues coloca éste código para tu funcion..:  
 Cita:  CREATE Function Password_Cod()
RETURNS nvarchar(50)
AS
BEGIN
DECLARE @Password_Cod nvarchar(8), @Nu int, @les nvarchar(50),
@Le nchar(1),@I int  
 
     Set @les = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnPpQqRrSsTtUuVvWwXxYyZ  z'
DECLARE @random FLOAT
     SET @I = 1
     SET @Password_Cod = ''
     WHILE @I <= 8
     BEGIN      
	SET @random = (SELECT numero FROM vRandom) 
	SET Select @Nu =  cast(( (50) * @random + 1) as int)
      	SET @Le = substring(@les, @Nu, 1)
	SET @Password_Cod =  @Password_Cod + @Le
        SET @i  = @i + 1
     END 
 
RETURN @Password_Cod
End
    
Espero que te sirva.. 
Salu2