You can simply update the Rate data and then change the data type of the column.
First you can check CAST using the following query (only for decimal places <0.000001)
SELECT
[Rate],
CAST([Rate] as decimal(28, 6)) Rate_decimal
FROM [dbo].[TES_Tracks]
WHERE [Rate] - FLOOR([Rate]) < 0.000001;
Once you confirm the validity of the CAST expression, you can apply it using the UPDATE statement. Again, you can only update rows that have one [Rate] - FLOOR([Rate]), thereby getting good performance.
UPDATE [dbo].[TES_Tracks]
SET [Rate] = CAST([Rate] as decimal(28, 6))
WHERE [Rate] - FLOOR([Rate]) < 0.000001;
ALTER TABLE [dbo].[TES_Tracks] ALTER COLUMN [Rate] DECIMAL(28,6);
, Rate.
- SQL Fiddle