Update X set X.a = Rand()
Will write the same value for all X.a (Rand is only executed once per statement)
An alternative is to use an integer seed derived from the data
Update X set X.a = Rand(X.AnIntVal)
Also
Select X.a from X order by Rand()
Will not order data randomly
An alternative is to use NewID(). I've found this slow on large datasets (Please post alternatives here)
Select X.a from X order by NewID()
These are quick and dirty solutions. For a more complete solution see http://msdn.microsoft.com/en-us/library/aa175776(SQL.80).aspx for random sampling.